BLu*_*NiX 0 android android-fragments android-activity
我有一个Fragment"选择一年"按钮.此按钮ListFragment在后台添加一个用户可以选择一年的后台.一旦选择了一年,我想处理ListFragment并返回第一个片段.使用在ListFragment?中选择的数据更新第一个片段的最佳方法是什么?
TL; DR:Fragment1打开Fragment2,用户在Fragment2中选择选项.如何使用此数据更新Fragment1?
我目前的解决方案是一个静态成员的公共类,但我想知道是否Android有更好的方法.
所有Fragment-to-Fragment通信都是通过相关的Activity完成的.两个碎片永远不应该直接通信.[ 来源 ]
在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);
}
}
Run Code Online (Sandbox Code Playgroud)
添加implements Fragment2.OnItemSelectedListener到您的活动定义,并定义onItemSelected方法:
public void onItemSelected(int position) {
Fragment1 fragment = (Fragment1)
getSupportFragmentManager().findFragmentById(R.id.fragment1);
if (fragment != null) {
fragment.updateValue(position);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |