3

私は 2 つの参考資料を参照し、2 つのフラグメント間の通信を理解するために最善を尽くしました。ここの以前の質問 + 2 つの参照の助けを借りて、このコードを思いつくことができました。ユーザーが ListFragment FragA で行った選択を取得するには、FragB に何を入力する必要がありますか?

主な活動:

public class MainActivity extends Activity implements OnDataPass{
...

@Override
public void onDataPass(String data) {
    // TODO Auto-generated method stub

    FragA transaction1 = ((FragA) getFragmentManager().findFragmentByTag("ItemRoleList"));
    transaction1.dataPasser.onDataPass(data);

}

}

FragA は次のとおりです。

public class FragA extends ListFragment{

OnDataPass dataPasser;

public interface OnDataPass{
    public void onDataPass(String data);
}

@Override
public void onAttach(Activity a) {
    super.onAttach(a);

    // This makes sure that the container activity has implemented
    // the callback interface. If not, it throws an exception
    try {
        dataPasser = (OnDataPass) a;
    } catch (ClassCastException e) {
        throw new ClassCastException(a.toString()
                + " must implement OnHeadlineSelectedListener");
    }
}
4

2 に答える 2

2

これが私が理解したものです。アクティビティに 2 つのフラグメント (A、B) があります。A はリストフラグメントです。A でアイテムを選択すると、文字列を B に渡す必要があります。

onListItemClick()フラグメント A の最初のオーバーライド

フラグメントA:

public class FragmentA extends ListFragment{
    ...

    void onListItemClick(ListView l, View v, int position, long id){
        datapasser.onDatapass(data)//here pass the String
    }
}

アクティビティの onDataPass メソッドで:

void onDataPass(String data){
    FragmentB dataUser = getFragmentB();//Your FragmentB object
    dataUser.use(data);
}

フラグメント B:

public class FragmentB extends Fragment{
    ...

    void use(String data){
        //here use the data
    }
}
于 2012-09-07T04:55:49.280 に答える
0

これを実装した方法は、オブザーバー パターンを使用することです。以下の疑似コード:

アクティビティ

public myActivity extends Activity implements OnDataPass {
    Observable fragmentData;

    void onDataPass(String data) { fragmentData = data; }
}

フラグメントA

...
datapasser.onDataPass(data);
...

フラグメント B

public FragmentB extends Fragment implements Observer {

onCreate(...) {
    ...
    ((myActivity)getActivity()).fragmentData.addObserver(this);
    ...
}

update(Object data) {
   // Voila - you will arrive here whenever the data is updated
}

お役に立てれば...

于 2012-09-07T06:17:43.373 に答える