片段接口与另一个片段通信

时间:2012-09-07 04:18:27

标签: android fragment

我已经超过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");
    }
}

2 个答案:

答案 0 :(得分:2)

这是我理解的。您在活动中有两个片段(A,B)。 A是列表片段。选择A中的项目时,必须将字符串传递给B。

首先覆盖片段A中的onListItemClick()

FragemtA:

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
    }
}

答案 1 :(得分: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
}

希望这会有所帮助......