2013-12-20 161 views
1

我跟隨slidenerd上的視頻來創建使用片段的滑動選項卡。 我基本上實現了一個pagerAdapter:如何使用滑動選項卡和ViewPager設置片段ID?

class pagerAdapter extends FragmentStatePagerAdapter 
{ 

    public pagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     Fragment fragment = null; 
     if (arg0 == 0) 
      fragment = new fragmentA(); 
     if (arg0 == 1) 
      fragment = new fragmentB(); 
     if (arg0 == 2) 
      fragment = new fragmentC(); 
     if (arg0 == 3) 
      fragment = new fragmentD(); 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return 4; 
    } 

} 

而這個偉大的工程至今。 現在我希望能夠通過活動將信息從一個片段發送到另一個片段。 我所做的就是創建一個活動和片段實現的通信器接口。

public interface Communicator { 
    public void Send(int from, int to, Object object); 
    public void Receive(int id, Object object); 
} 

如果fragmentA希望發送fragmentB消息,我只是用Send(a's id, b's id, someData) 的活動處理的消息,並使用fragmentManager將郵件傳遞到B:

public void Send(int from, int to, Object object) { 
    FragmentManager fm = getSupportFragmentManager(); 
    Communicator comm = (Communicator) fm.findFragmentById(...); 
    if (comm != null) 
     comm.Receive(from, object); 
} 

這正是林卡住。我需要得到一個指向我的片段的指針,但不知道如何給它一個id .. ViewPager有點讓我困惑。

+0

fragmentStatePagerAdapter可以在需要時關閉碎片,因此可能無法發送消息。 – Kuffs

+0

@Kuffs感謝您的注意。你的意思是,也作爲Java對象,或只是作爲一個視圖? – buddy123

+0

如果需要,它會關閉片段直到再次需要它,在這種情況下它會再次啓動它。如果你需要你的片段存在,直到你決定擺脫他們,你需要一個FragmentPagerAdapter。 – Kuffs

回答

2

您可以從適配器它自身獲得片段的引用:

public void Send(int from, int to, Object object) { 

    Communicator comm = pagerAdapter.getItem(to); 
    if (comm != null) 
     comm.Receive(from, object); 
} 

這裏,並從應是內部適配器片段的指數。

+0

我明白了。謝謝。但我不確定在用戶活動期間是否將其作爲其中一個碎片替換爲我的100%。即tab0是搜索片段,其中搜索操作將tab0中的片段替換爲結果片段,然後我想從搜索片段向結果片段發送消息。我不能使用pagerAdapter,因爲它會發送消息到自己 – buddy123

+0

你可以只保留引用結果和搜索片段,而替換和只是調用發送搜索對象 –

+0

Isnt有沒有其他方式來獲取指針/集ID片段除了viewPager之外的片段? – buddy123

相關問題