与另一个片段通信的片段接口
Posted
技术标签:
【中文标题】与另一个片段通信的片段接口【英文标题】:Fragment interface communicating with another fragment 【发布时间】:2012-09-07 04:18:27 【问题描述】:我已经参考了 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");
【问题讨论】:
【参考方案1】:这是我的理解。您在活动中有两个片段(A,B)。 A 是一个列表片段。在 A 中选择一个项目时,您必须将一个字符串传递给 B。
首先在 Fragment A 中覆盖 onListItemClick()
片段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
【讨论】:
那么什么时候访问 void use(String data) 呢?是在 onActivityCreated() 之前还是之后?原因基本上在 FragB 中(FragB 是一个 ListFragment,对不起,我之前没有具体说明这一点)取决于从 FragA 在 ListFragment 上的选择传入的字符串,FragB 进入数据库,我必须检索一个列表。那么我怎样才能在我的 onActivityCreated() 中访问这些信息呢?【参考方案2】:我实现这一点的方式是使用观察者模式。伪代码如下:
活动
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
希望这会有所帮助...
【讨论】:
我的FragB我忘了说是一个ListFragment,但是update(Object data)是在这一行访问的,((myActivity)getActivity()).fragmentData.addObserver(this);?跨度> 我在 void onDataPass(String data) fragmentData = data; 中出现错误,原因是类型不匹配。 道歉 - 有一个错误。它应该是 fragmentData.setData(data)。 observable 应该实现这个接口。希望这次能有所帮助...以上是关于与另一个片段通信的片段接口的主要内容,如果未能解决你的问题,请参考以下文章