2017-07-18 81 views
0

我有一個ViewPager,並且在其上放置了一些片段。片段是不同類的,他們將有不同的佈局和不同的按鈕,功能等Android:ViewPager中的訪問片段方法

我不知道如果我採取正確的方法進行任務:

Fragment1 f1 = Fragment1.newInstance("FRAGMENT 1"); 
Fragment2 f2 = Fragment2.newInstance("FRAGMENT 2"); 
Fragment3 f3 = Fragment3.newInstance("FRAGMENT 3"); 
List<Fragment> fragmentsToPager = new Vector<Fragment>(); 
this.mPagerAdapter = new MyFragmentAdapter(super.getSupportFragmentManager(), fragmentsToPager); 
mPager.setAdapter(this.mPagerAdapter); 

我的問題是,現在,如果我想迭代列表中的片段,因爲片段來自不同的類Fragment1,Fragment2,Fragment3,是否可以訪問片段中定義的方法或每個片段上的小部件?

for (Fragment f : fragmentsToPager){ 
    f.someFragmenthMethod(); 
    .... 
} 
+0

是的,只投的片段有正確的方法的類。 –

+0

@Vlad Matvienko因爲我需要對迭代進行一些類檢查,這就是爲什麼我開始懷疑使用片段是否是正確的方法來執行此任務 – codeKiller

+0

您可以使所有片段實現一些接口,如果你需要所有片段的相同方法。 –

回答

0
for (Fragment f : fragmentsToPager){ 
      if (f instanceof Fragment1) { 
       ((Fragment1) f).someFragmenth1Method(); 
      }else if(f instanceof Fragment2) { 
       ((Fragment2) f).someFragmenth2Method(); 
      }else if(f instanceof Fragment3) { 
       ((Fragment3) f).someFragmenth3Method(); 
      } 

     } 
+0

謝謝,我只是擔心如果在這種情況下使用像'instance of'這樣的表達式是正確/方便的嗎? – codeKiller

0

您可以定義一個接口(如IMyFragmentProcess)和所有的片段實現此接口(IMyFragmentProcess):

IMyFragmentProcessf1 = Fragment1.newInstance("FRAGMENT 1"); 
IMyFragmentProcessf2 = Fragment2.newInstance("FRAGMENT 2"); 
IMyFragmentProcessf3 = Fragment3.newInstance("FRAGMENT 3"); 
List<IMyFragmentProcess> fragmentsToPager = new Vector<IMyFragmentProcess>(); 

for (IMyFragmentProcess f : fragmentsToPager){ 
    f.someFragmenthMethod(); 
    .... 
} 
+0

'IMyFragmentProcessf1 = Fragment1.newInstance(「FRAGMENT 1」);''''會產生一個類似下面的錯誤:incompatible types:Required Fragment1 Found IMyFragmentProcessf1 ??? – codeKiller