我已经超过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");
}
}
答案 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
}
希望这会有所帮助......