1. 程式人生 > >ViewPager中巢狀activity頁面

ViewPager中巢狀activity頁面

做專案使用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關聯子頁面的語句,一般格式為:

  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. mViews.add(tab01);//將頁面新增到View集合
  8. mViews.add(tab02);  
  9. mViews.add(tab03);  
  10. id_ViewPager.setAdapter(adapter);// 配置介面卡
上邊該語句對應普通的不需要事件的子頁面設定沒問題,但是想要子頁面為activity,就必須改變關聯語句:
  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. manager = new LocalActivityManager(thistrue);  
  6. manager.dispatchCreate(savedInstanceState);  
  7. intentMain = new Intent(StartActivity.this, MainActivity.class);  
  8. View tab01 = manager.startActivity("viewID", intentMain).getDecorView();          
  9. intentCircle = new Intent(StartActivity.this, CircleActivity.class);  
  10. View tab02 = manager.startActivity("viewID", intentCircle).getDecorView();        
  11. intentMy = new Intent(StartActivity.this, MyActivity.class);  
  12. View tab03 = manager.startActivity("viewID", intentMy).getDecorView();  
  13. mViews.add(tab01);//將頁面新增到View集合
  14. mViews.add(tab02);  
  15. mViews.add(tab03);  
  16. id_ViewPager.setAdapter(adapter);// 配置介面卡
原始碼下載地址  這時候你會發現子activity可以在自己頁面單獨寫事件方法了。 執行效果如下: