您的位置:首页 > 其它

动态添加ViewPager的View

2015-12-16 16:09 399 查看
http://blog.csdn.net/lihonghao1017/article/details/10108907(转)

最近做一个项目,要求初始ViewPager一共3页,当滑到第三页的时候在加载三页,也就是一共有6页了,然后依次类推,每次加载3页;

效果图:





逻辑代码:

public class MainActivity extends Activity {

private ArrayList<View> listViews;

private ViewPager pager;

private int count = 1;

private LayoutInflater inflater;

private MyPageAdapter adapter;

private int pagerCount=1;

private Toast mToast;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

//        listViews=new ArrayList<Fragment>();

        pager=(ViewPager) findViewById(R.id.viewpager);

        inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    pager.setOnPageChangeListener(pageChangeListener);// 设置页面滑动监听
initListViews(count);// 添加View对象
adapter = new MyPageAdapter(listViews);// 构造adapter
pager.setAdapter(adapter);// 设置适配器

    }

    /**
* listViews添加view对象

* @param count
*/
private void initListViews(int count) {
if (listViews == null)
listViews = new ArrayList<View>();
for (int i = 0; i < 3; i++) {

View mTextView = inflater.inflate(R.layout.myfragment0, null);// 构造textView对象
TextView tv01=(TextView) mTextView.findViewById(R.id.textView1);
TextView tv02=(TextView) mTextView.findViewById(R.id.textView2);
tv01.setText("第"+pagerCount+"页");
tv02.setText("第" + count + "次更新");// 设置文字
// 设置布局

// mTextView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,

// LayoutParams.MATCH_PARENT));
// 设置位置
tv02.setGravity(Gravity.CENTER);
listViews.add(mTextView);// 添加view
pagerCount++;
}
}
/**
* 页面监听事件
*/
private OnPageChangeListener pageChangeListener = new OnPageChangeListener() {

public void onPageSelected(int arg0) {// 页面选择响应函数
// 如果需要实现页面滑动时动态添加 请在此判断arg0的值
   // 当然此方式在必须在初始化ViewPager的时候给的页数必须>2
// 因为给1页的话 ViewPager是响应不了此函数的
// 例:
if (arg0 == pager.getAdapter().getCount() - 1) {// 滑动到最后一页
count++;
initListViews(count);// listViews添加数据
adapter.setListViews(listViews);// 重构adapter对象
adapter.notifyDataSetChanged();// 刷新
}

if (mToast == null)
mToast = Toast.makeText(MainActivity.this, "翻到了第" + (arg0 + 1)
+ "页", 1);
else {
mToast.setText("翻到了第" + (arg0 + 1) + "页");
}
mToast.show();
}

public void onPageScrolled(int arg0, float arg1, int arg2) {// 滑动中。。。

}

public void onPageScrollStateChanged(int arg0) {// 滑动状态改变

}
};
/**
* ViewPager适配器

* @author zhou

*/
class MyPageAdapter extends PagerAdapter {

private ArrayList<View> listViews;// content

private int size;// 页数

public MyPageAdapter(ArrayList<View> listViews) {// 构造函数
// 初始化viewpager的时候给的一个页面
this.listViews = listViews;
size = listViews == null ? 0 : listViews.size();
}

public void setListViews(ArrayList<View> listViews) {// 自己写的一个方法用来添加数据
this.listViews = listViews;
size = listViews == null ? 0 : listViews.size();
}

@Override
public int getCount() {// 返回数量
return size;
}

@Override
public void destroyItem(View arg0, int arg1, Object arg2) {// 销毁view对象
((ViewPager) arg0).removeView(listViews.get(arg1));
}

@Override
public void finishUpdate(View arg0) {
}

@Override
public Object instantiateItem(View arg0, int arg1) {// 返回view对象
try {
((ViewPager) arg0).addView(listViews.get(arg1), 0);
} catch (Exception e) {
Log.e("zhou", "exception:" + e.getMessage());
}
return listViews.get(arg1);
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}

}

}

activity_main.xml布局如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity" >

     <android.support.v4.view.ViewPager

        android:id="@+id/viewpager"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        >

        

    </android.support.v4.view.ViewPager>

</RelativeLayout>

myfragment0.xml布局如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="#ffffff"

    android:gravity="center_vertical|center_horizontal"

    android:orientation="vertical" >

    <TextView

        android:id="@+id/textView2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:gravity="center"

        android:textColor="@android:color/black"

        />

    <TextView

        android:id="@+id/textView1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:gravity="center"

           android:textColor="@android:color/black"

       />

</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  viewpager