ViewPager中嵌套activity页面

时间:2024-05-20 14:45:50

做项目使用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关联子页面的语句,一般格式为:

[java] view plain copy
  1. private List<View> mViews = new ArrayList<View>();  
  2. private ActivityAdapter adapter = new ActivityAdapter(mViews);  
  3. LayoutInflater mInflater = LayoutInflater.from(this);  
  4. View tab01=mInflater.inflate(R.layout.activity_main,null);//参数为想要放置的子activity页面  
  5. View tab02 = mInflater.inflate(R.layout.activity_circle, null);  
  6. View tab03 = mInflater.inflate(R.layout.activity_my, null);  
  7.   
  8. mViews.add(tab01);//将页面添加到View集合  
  9. mViews.add(tab02);  
  10. mViews.add(tab03);  
  11. id_ViewPager.setAdapter(adapter);// 配置适配器  



上边该语句对应普通的不需要事件的子页面设置没问题,但是想要子页面为activity,就必须改变关联语句:
[java] view plain copy
  1. private List<View> mViews = new ArrayList<View>();  
  2. private ActivityAdapter adapter = new ActivityAdapter(mViews);  
  3. private LocalActivityManager manager;  
  4. private Intent intentMain,intentCircle,intentMy;  
  5.   
  6. manager = new LocalActivityManager(thistrue);  
  7. manager.dispatchCreate(savedInstanceState);  
  8.   
  9. intentMain = new Intent(StartActivity.this, MainActivity.class);  
  10. View tab01 = manager.startActivity("viewID", intentMain).getDecorView();          
  11. intentCircle = new Intent(StartActivity.this, CircleActivity.class);  
  12. View tab02 = manager.startActivity("viewID", intentCircle).getDecorView();        
  13. intentMy = new Intent(StartActivity.this, MyActivity.class);  
  14. View tab03 = manager.startActivity("viewID", intentMy).getDecorView();  
  15.   
  16. mViews.add(tab01);//将页面添加到View集合  
  17. mViews.add(tab02);  
  18. mViews.add(tab03);  
  19. id_ViewPager.setAdapter(adapter);// 配置适配器  



源码下载地址 



这时候你会发现子activity可以在自己页面单独写事件方法了。

运行效果如下:
ViewPager中嵌套activity页面ViewPager中嵌套activity页面ViewPager中嵌套activity页面ViewPager中嵌套activity页面
ViewPager中嵌套activity页面ViewPager中嵌套activity页面ViewPager中嵌套activity页面
ViewPager中嵌套activity页面
ViewPager中嵌套activity页面
ViewPager中嵌套activity页面