2016-04-25 29 views
1

私のアンドロイドアプリケーションでは、2つのフラグメントがあります。親フラグメントには利用可能なフィルタタイプのリストが含まれています。特定のフィルタタイプをクリックすると(親フラグメント - 黄色のバックグラウンドで)、対応する子フラグメント(ピンクの背景)が開き、選択したフィルタタイプに対して使用可能なオプションのリストが表示されます。私の要件は、一度ユーザーが子フラグメントのオプションを選択/選択解除すると、親フラグメントのオプションカウント(緑色)を反映/更新する必要があります。子フラグメントからの親フラグメントの更新

添付のワイヤフレームを確認してください。あなたはそれが、前に使用していない場合

enter image description here

答えて

1

あなたは

たぶん、最初の時間は、あなたは少し奇妙なことができるなどの断片の間コミュニケーションズ、断片-活動、サービス、のためのオットー・バスを使用することができます非常に強力で使いやすいです。

http://square.github.io/otto/

例:あなたは、ライブラリ、ここでチュートリアルを見つけることができます。あなたのアダプターまたはアイテムのクリックイベントがある場所では、バスでオブジェクトを送信します。

あなたのバスでは、postメソッドを呼び出してオブジェクトを渡します。 (私はバスのためのシングルトンを作成することをお勧めします)。

シングルトンバスプロバイダ。

/** 
* Canal de comunicacion 
*/ 
public class BusProvider { 

    private static final Bus REST_BUS = new Bus(ThreadEnforcer.ANY); 
    private static final Bus UI_BUS = new Bus(); 

    private BusProvider() {}; 

    public static Bus getRestBusInstance() { 
     return REST_BUS; 
    } 

    public static Bus getUIBusInstance() { 
     return UI_BUS; 
    } 
} 

あなたはこのように(あなたの子供のフラグメントに)バスの中でオブジェクトを送信します。

@Subscribe 
public void activitySelected(final Item itemSelected) { 

} 

がそれを願って:あなたは、このイベントのためにサブスクライブ

BusProvider.getUIBusInstance().post(itemSelected); 

そして、あなたの親フラグメントで

あなたを助ける!

+0

ありがとうございます。しかし、ParentFragmentでイベントを受信すると、FilterCountを更新する方法はありません.Filter countはListViewの一部なので、 – Alex

0

は私の答えは遅れるかもしれないにもかかわらず、私はそれはまだ助けることができると思います:あなたは子供のものから親フラグメントにアクセスする必要がある場合には、

ソリューションは簡単ですが、その後、親のための特定のタグを使用します次のコード例のように、スタックに追加するとき:

1)を含むアクティビティで:

// We instanciate the parent fragment 
ParentFragment parentFragment = new ParentFragment(); 

FragmentTransaction ft = fm.beginTransaction(); 

// We add the parent fragment with a tag, so we can use it later to fetch 
// the current instance of the parent fragment from the child fragment 
ft.replace(R.id.content_frame, parentFragment, "parent_fragment_tag"); 

ft.addToBackStack(null); 

// Commit transaction 
ft.commit(); 

2)子の断片では、我々はこのような現在の親フラグメント・インスタンスを取得します:

Fragment parentFragment = getFragmentManager().findFragmentByTag("parent_fragment_tag"); 

この回答が役に立ったら嬉しいです。