3

我已经参考了 2 次以上,并尽我所能理解 2 个片段之间的通信。借助此处上一个问题的帮助 + 2 个参考资料,我能够提出此代码。我必须在我的 FragB 中放入什么来检索用户在 ListFragment FragA 中所做的选择?

主要活动:

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

这是我的理解。您在活动中有两个片段(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 回答