3

私はいくつかのフラグメントを持つTabLayoutを使ってViewPagerを持っています。私は、ViewPagerフラグメントの1つからボタンをクリックし、タブ名を使用して別のタブ/フラグメントにユーザを誘導したいと思います。ViewPagerフラグメントを子フラグメントから変更する

ボタンをクリックすると、TabLayoutを変更してそのタブに関連付けられたフラグメントを表示したいと思います。私はまた、新しい断片を示すために、追加のデータを送る必要があります。

私はViewPager setCurrentItem(int index)にアクセスできません。理想的には、要求を完了するために親と連絡したいと思います。

答えて

3

あなたが書く必要がありますそうのような(ViewPagerサブフラグメントを含む)は、親の方法において:

public void setPagerFragment(int a) 
{ 
    pager.setCurrentItem(a); 
} 

これは、指定された一つであることがViewPagerに現行断片を設定します。これは、あなたが子供に呼ばれるように、親に別の方法を作ることができる新しいフラグメントに表示するための要求を追加データを送信に関しては

int newFrag = 0; //the number of the new Fragment to show 
ParentActivity parent = (ParentActivity) getActivity(); 
parent.setPagerFragment(newFrag); 

:あなたは、その後で子断片からこのメソッドを呼び出すことができます親にいくつかのデータを設定します。親は新しいフラグメントを設定するときにそれを使用できます。

親例えば:

public void setExtraData(Object data) 
{ 
    dataFromChildFrag = data; 
} 

そしてそうのような子でこれを使用します。

String data = "My extra data"; //the number of the new Fragment to show 
ParentActivity parent = (ParentActivity) getActivity(); 
parent.setExtraData(data); 

最後に、親が実際にフラグメント自体ではなく、アクティビティのであれば、単に

ParentActivity parent = (ParentActivity) getActivity(); 

のすべての参照を置き換えます
ParentFragment parent = (ParentFragment) getParentFragment(); 

こちらがお役に立てば幸いです。

0

これを達成する最も簡単な方法は、EventBusフレームワークを使用することです!

1)ニーズ

public class ClickedButtonInsideFragmentEvent { 

    // some data you want to store 

} 

2)ご契約者の準備を満たしイベントクラスを作成します。

は私がEventBus by greenRobot

を実装する方法を使用して(ED)を好みます!

public class MyTabActivity { 

    public void onCreate(Bundle savedInstanceSate) { 
     // your stuff you do in onCreate 
     eventBus.register(this); 
    } 

    @Subscribe 
    public void onEvent(ClickedButtonInsideFragmentEvent event) { 
     // Do what you want to do 
    } 

} 

3)、そして最後に:あなたのケースでは、これは、タブレイアウトへの参照を保持している活動となり、あなたのOnClickListenerのインサイダーあなたのフラグメントからイベントをポスト:

public class MyClickableFragment { 

    public void initOnClickListiner(View clickableView) { 
     clickableView.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       ClickedButtonInsideFragmentEvent event = new ClickedButtonInsideFragmentEvent(); 
       // add what you want to your event 
       eventBus.post(event);     
      } 
     )); 
    } 

    @Subscribe 
    public void onEvent(ClickedButtonInsideFragmentEvent event) { 
     // Do what you want to do 
    } 

} 
関連する問題