在数据适配器PagerAdapter的初始化方法中添加按钮事件,这里是关键,首先判断当前的页卡编号。必须使用当前的view来获取按钮。
@Overridepublic Object instantiateItem(View arg0, int arg1) {if (arg1 < 3) {((ViewPager) arg0).addView(mListViews.get(arg1 % 3), 0);}// 测试页卡1内的按钮事件if (arg1 == 0) {Button btn = (Button) arg0.findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new AlertDialog.Builder(MainActivity.this).setTitle("说明").setMessage("单个页卡内按钮事件测试").setNegativeButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {}}).show();}});}return mListViews.get(arg1 % 3);}
如果不在这里面添加事件,那么在viewpager的视图经过切换后,原有的视图里组件事件将丢失。
viewpager.setOffscreenPageLimit(int num)可以设置预先加载的页面个数。因为每个页面都有若干个子页面,如果不预先把7个页面全加载完,那么在滑动几次后将丢失之前页面的一些子页面显示状态
另外,需要注意的是在ViewPager中,它除了加载当前页,还会加载当前页的左右页(无论它们实际可不可见)。除了当前页的View算是可见的,其左右页的View算是可见的(无论它们实际可不可见),即onWindowVisibilityChanged(int visibility)中的参数是View.VISIBLE。