2017-05-31 6 views
0

私は3つのタブフラグメントTAB1、TAB2、およびTAB3を持っています。 TAB1では、クリックするとインターフェイスを使用してTAB2およびTAB3にデータを送信し、それぞれのフラグメントのtextViewにデータを表示する必要があります。タブフラグメントボタンクリックすると複数のタブにデータが送信されますフラグメント

// interface codes 
    public interface IFragmentToActivity { 
    void Tab1ToTab2(String value); 
} 

// in activity 

    @Override 
    public void Tab1ToTab2(String value) { 
TabFragment2 fragment = (TabFragment2) adapter.getFragment(1); 
if (fragment != null) { 
    fragment.fragmentCommunicationFragment(value); 
} else { 
    // Log.i(LOG_TAG, "Fragment 2 is not initialized"); 
} 
    } 


    /// in TAB1 i send data 

      @Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.button2: 
      mCallback.FragmentToFragment("hi from tab 1"); 
      break; 
      } 
        } 

の下にど​​のように私はそれがすべてのフラグメントのために働くことができますようにこれまでのところ私は、TAB1からTAB2に送信するために管理していますか?これは私がTAB2と3

インターフェースコード

public interface IFragmentToActivity { 
void Tab1ToTab2(String value); 
void Tab1ToTab3(String value); 
    } 

TAB1が

 @Override 
     public void Tab1ToTab2(String value) { 
    TabFragment2 fragment = (TabFragment2) adapter.getFragment(1); 
    if (fragment != null) { 
     fragment.fragmentCommunicationFragment(value); 
    } else { 
     // Log.i(LOG_TAG, "Fragment 2 is not initialized"); 
    } 
} 

@Override 
public void Tab1ToTab3(String value) { 
    TabFragment3 fragment = (TabFragment3) adapter.getFragment(1); 
    if (fragment != null) { 
     fragment.FromFragmentOne(value); 
    } 

    else { 
     // Log.i(LOG_TAG, "Fragment 3 is not initialized"); 
    } 
} 
を受信するデータを主な活動で

@Override 
     public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.button2: 
      mCallback.Tab1ToTab2("hi from tab 1"); 
      mCallback.Tab1ToTab3(hi from tab 1"); 
      break; 
    } 

コードを送信するために送信する場合、私が試したものです

/// TAB 2メソッド受信データ

public void fragmentCommunicationFragment(String value){ 
     mTextView1.setText(value); 
     } 

/// TAB 3の方法は、あなたの第2のフラグメントとTabFragment3をinstanciatingしているあなたのTab1ToTab3方法で

public void FromFragmentOne(String kabila){ 
    mTextView1.setText(kabila); 
} 

//アダプタ

public class PagerAdapter extends FragmentStatePagerAdapter { 
private final SparseArray<WeakReference<Fragment>> instantiatedFragments = new SparseArray<>(); 
private ArrayList<String> mTabHeader; 
int mNumOfTabs; 

public PagerAdapter(FragmentManager fm, int NumOfTabs) { 
    super(fm); 
    this.mNumOfTabs = NumOfTabs; 
} 

@Override 
public Fragment getItem(int position) { 

    switch (position) { 
     case 0: 
      TabFragment1 tab1 = new TabFragment1(); 
      return tab1; 
     case 1: 
      TabFragment2 tab2 = new TabFragment2(); 
      return tab2; 
     case 2: 
      TabFragment3 tab3 = new TabFragment3(); 
      return tab3; 
     case 3: 
      TabFragment4 tab4 = new TabFragment4(); 
      return tab4; 
     default: 
      return null; 
    } 
} 
+0

私はあなたがsetArgument()とgetArgument()を使用する必要があると思います。 –

+0

ありがとう@AniruddhParihar私はあなたがそのコンセプトのサンプルコードを教えていただけますか? – f2k

+0

私はコードを投稿しました。それを確認してください。 –

答えて

1

データを受け取る:

TabFragment3 fragment = (TabFragment3) adapter.getFragment(1); 

TabFragment3 fragment = (TabFragment3) adapter.getFragment(2); 
+0

あなたの応答の@Alexandre BOURETZに感謝しましたが、Tab3で表示されたデータはまだTab2に表示されました – f2k

0

//あなたのデータの文字列とsetMenuVisibilityを取得するには、この

@Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0: 
       Bundle bundle = new Bundle(); 
       bundle.putString("YOUR_KEY","YOUR VALUE"); 
       TabFragment1 tab1 = new TabFragment1(); 
       tab1.setArguments(bundle); 
       return tab1; 
      case 1: 
       Bundle bundle2 = new Bundle(); 
       bundle2.putString("YOUR_KEY","YOUR VALUE"); 
       TabFragment2 tab2 = new TabFragment2(); 
       tab2.setArguments(bundle2); 
       return tab2; 
      case 2: 
       Bundle bundle3 = new Bundle(); 
       bundle3.putString("YOUR_KEY","YOUR VALUE"); 
       TabFragment3 tab3 = new TabFragment3(); 
       tab3.setArguments(bundle3); 
       return tab3; 
      case 3: 
       Bundle bundle4 = new Bundle(); 
       bundle4.putString("YOUR_KEY","YOUR VALUE"); 
       TabFragment4 tab4 = new TabFragment4(); 
       tab4.setArguments(bundle4); 
       return tab4; 
      default: 
       return null; 
     } 

// TabFragment1、TabFragment2、TabFragment3、TabFragment4 オーバーライドアンダーonActivityCreated()を使用してのgetItem()メソッドを更新します。 (boolean menuVisible)ビューを更新する

 public static String data; 


    @Override 
     public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 
      Bundle bundle = getArguments(); 
      String yourValue = bundle.getString("YOUR_KEY"); 
imageView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        TabFragment1.data="Update"; 
        TabFragment2.data="Update"; 
        TabFragment3.data="Update"; 
        TabFragment4.data="Update"; 
    //update your current View from here 
       } 
      }); 
     } 



    @Override 
     public void setMenuVisibility(boolean menuVisible) { 
      super.setMenuVisibility(menuVisible); 
      if(menuVisible){ 
       //update your current View from here 
      } 
     } 

これを使用すると、すべてのフラグメントデータビューを任意のフラグメントから更新できます。をクリックして

+0

@Aniruddh Pariharは、すべてのフラグメントに事前定義されたデータを表示しますが、私の質問は、すべての断片。 – f2k

+0

またはタブ1から値を取得し、そのような概念を使用してすべてのフラグメントに表示できるようにするにはどうすればよいですか?thanks @Aniruddh Parihar – f2k

+0

各フラグメントで静的変数とsetMenuVisibility()メソッドを使用することでこれを行うことができます。 4つのフラグメントがある場合は、各フラグメントの1つに、データを含むコレクションまたはクラスのMake 4静的変数があります。 TabFragment1のOnClick()には、各フラグメントのsetMenuVisibility(boolean menuVisible)メソッドがオーバーライドされています。 4つの静的変数すべてを、すべてのフラグメントに表示したいデータで更新し、TabFragment1のデータを更新します。今度はあなたがTabFragment2に入ると、setMenuVisibility(boolean menuVisible)が呼び出されます。ここでは –

関連する問題