做项目使用ViewPager显示页面遇到一个问题,就是当一个activity对应的xml页面使用了ViewPager控件,并且控件中的子页面也是activity页面时,子页面的事件如果使用匿名内部类方式,会直接执行不到,如果使用onClick方式,这时候会提示在父activity页面没有该方法,根据提示你会发现当事件写到父activity中就不会出错了,如果只有一两个控件那也无所谓了,但是通常activity对应的页面事件不会很少,那么好几个子activity的事件都写到父activity中代码不止乱,而且还很难维护,那么该怎么让每个子页面的事件写到自己的activity中呢。
示例;
父activity--------StartActivity,java activity_start.xml页面(包含ViewPager控件,id为id_ViewPager)
子activity--------MainActivity.java activity_main.xml
activity--------CircleActivity.java activity_circle.xml
activity--------MyActivity.java activity_my.xml
通常都会在StartActivity.java页面设置ViewPager关联子页面的语句,一般格式为:
-
private List<View> mViews = new ArrayList<View>();
-
private ActivityAdapter adapter = new ActivityAdapter(mViews);
-
LayoutInflater mInflater = LayoutInflater.from(this);
-
View tab01=mInflater.inflate(R.layout.activity_main,null);//参数为想要放置的子activity页面
-
View tab02 = mInflater.inflate(R.layout.activity_circle, null);
-
View tab03 = mInflater.inflate(R.layout.activity_my, null);
-
-
mViews.add(tab01);//将页面添加到View集合
-
mViews.add(tab02);
-
mViews.add(tab03);
-
id_ViewPager.setAdapter(adapter);// 配置适配器
上边该语句对应普通的不需要事件的子页面设置没问题,但是想要子页面为activity,就必须改变关联语句:
-
private List<View> mViews = new ArrayList<View>();
-
private ActivityAdapter adapter = new ActivityAdapter(mViews);
-
private LocalActivityManager manager;
-
private Intent intentMain,intentCircle,intentMy;
-
-
manager = new LocalActivityManager(this, true);
-
manager.dispatchCreate(savedInstanceState);
-
-
intentMain = new Intent(StartActivity.this, MainActivity.class);
-
View tab01 = manager.startActivity("viewID", intentMain).getDecorView();
-
intentCircle = new Intent(StartActivity.this, CircleActivity.class);
-
View tab02 = manager.startActivity("viewID", intentCircle).getDecorView();
-
intentMy = new Intent(StartActivity.this, MyActivity.class);
-
View tab03 = manager.startActivity("viewID", intentMy).getDecorView();
-
-
mViews.add(tab01);//将页面添加到View集合
-
mViews.add(tab02);
-
mViews.add(tab03);
-
id_ViewPager.setAdapter(adapter);// 配置适配器
源码下载地址
这时候你会发现子activity可以在自己页面单独写事件方法了。
运行效果如下: