2017-10-18 1 views
0

私は現在、各フラグメントの新しいインスタンスをgetItem(int position)メソッドで作成するFragmentPagerAdapterを持っています。しかし、私は再び作成したフラグメントにどのようにアクセスするかについてはあまりよく分かりません。他のクラスがFragmentPagerAdapterから呼び出して、たとえば位置12で作成された特定のフラグメントを選択できるパブリックメソッドはありますか?FragPagerAdapterの特定のフラグメントにどのようにアクセスしますか?

public class ChannelFragmentAdapter extends FragmentPagerAdapter { 
    private int numChannels; 
    public ChannelFragmentAdapter(FragmentManager fm, Activity context, PatientSettings user) { 
     super(fm); 
     this.context = context; 
     numChannels = user.channelsLimit; 
     for(int i = 1; i <= numChannels; i++){ 
      channelTabs.add("" + i); 
     } 
    } 

    @Override 
    public int getCount() { 
     return channelTabs.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     //new instance is a static factory for creating Fragment objects 
     return ChannelFragment.newInstance(position + 1, this); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     //generate title based on item position 
     //return tabTitles[position]; 
     return channelTabs.get(position); 
    } 
} 
+0

あなたのコードを教えていただけますか? – Jerrol

+0

質問を関連コードで更新します。 –

答えて

1

私はあなたがそうFragmentStatePagerAdapterが優れている使用して、5つの以上のフラグメントをサポートしていますviewpagerを作成しようとしていると仮定します。

「フラグメントタグを使用して、findFragmentByTag()に入ります。あなたのアダプターでは、それらをリストに保管し、必要に応じて入手してください。

public class ChannelFragmentAdapter extends FragmentPagerAdapter { 
    private int numChannels; 
    Map<Integer, String> tags; 

    public ChannelFragmentAdapter(FragmentManager fm, Activity context, PatientSettings user) { 
     super(fm); 
     this.context = context; 
     numChannels = user.channelsLimit; 
     tags = new HashMap<>(); 
     for (int i = 1; i <= numChannels; i++) { 
      channelTabs.add("" + i); 
     } 
    } 

    @Override 
    public int getCount() { 
     return channelTabs.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     //new instance is a static factory for creating Fragment objects 
     return ChannelFragment.newInstance(position + 1, this); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     //generate title based on item position 
     //return tabTitles[position]; 
     return channelTabs.get(position); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     Fragment createdFragment = (Fragment) super.instantiateItem(container, position); 
     tags.put(position, createdFragment.getTag()); 
     // ... save the tags somewhere so you can reference them later 
     return createdFragment; 
    } 
} 

注:findFragmentByTag()を使用している場合はnullを確認してください、あなたのフラグメントが破壊されたり置き換えることができます。

+0

答えをありがとう。今私は、FragmentStatePagerAdapterとFragmentPagerAdapterがその中に含まれているフラグメントをどのように編成/使用するかで特に異なるものとして興味があります。 –

+0

簡単な方法で考えてみましょう。書籍を読んでいるような断片をたくさん作成したい場合は、FragmentStatePagerAdapterを使用してください –

関連する問題