我有一个Fragment
,带有“选择一年”按钮。此按钮向后台添加ListFragment
,用户可以选择一年。选择一年后,我想处理ListFragment
并返回第一个片段。使用在ListFragment
?
TL; DR:Fragment1打开Fragment2,用户在Fragment2中选择选项。如何使用此数据更新Fragment1?
我目前的解决方案是一个有静态成员的公共类,但我想知道Android
是否有更好的方法。
答案 0 :(得分:6)
所有片段到片段的通信都是通过关联的方式完成的 活动。两个碎片永远不应该直接通信。 [Source]
在Fragment2中定义一个接口,并在主机Activity中实现此接口。当您从Fragment2调用接口方法时,您可以从Activity上的接口方法内部访问Fragment1,并通过其公共方法将相应的数据传递给Fragment1。
创建界面:
public class Fragment2 extends ListFragment {
OnItemSelectedListener mCallback;
public interface OnItemSelectedListener {
public void onItemSelected(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallback = (OnItemSelectedListener ) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnItemSelectedListener");
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
mCallback.onItemSelected(position);
}
}
将implements Fragment2.OnItemSelectedListener
添加到您的活动定义中,并定义onItemSelected方法:
public void onItemSelected(int position) {
Fragment1 fragment = (Fragment1)
getSupportFragmentManager().findFragmentById(R.id.fragment1);
if (fragment != null) {
fragment.updateValue(position);
}
}