我在一个 Android 应用程序中有两个 fragment 。
这是 fragment A:
public class AlertsAgentDialogFragment extends DialogFragment {
...
...
OnDataPass dataPasser;
public interface OnDataPass{
public void onDataPass(String data);
}
...
}
public class AgentClickListener implements View.OnFocusChangeListener {
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
AlertsAgentDialogFragment dialog = AlertsAgentDialogFragment.newInstance(listValueSet_Agent);
dialog.show(getActivity().getFragmentManager(),"");
}
}
}
这是 fragment B
public class AlertsDialogFragment extends DialogFragment implements AlertsAgentDialogFragment.OnDataPass {
...
...
public AlertsDialogFragment() {
mContext = getActivity();
}
...
...
@Override
public void onDataPass(String data) {
// TODO Auto-generated method stub
AlertsAgentDialogFragment transaction1 = ((AlertsAgentDialogFragment) getFragmentManager().findFragmentByTag("ItemRoleList"));
transaction1.dataPasser.onDataPass(data);
}
...
}
在 Fragment A 中,用户可以从 RecycleListView 中选择一个 Items,我希望当用户选择 List 中的一个项目时,Fragment B 可以读取该选择。
如何更改我的代码来执行此操作?
问候
最佳答案
基本思想是您不必直接将数据从一个 fragment 传递到另一个 fragment 。
As the documentation says ,您必须将数据从一个 Fragment 传递到 Activity,然后 Activity 将这些数据传递到另一个 Fragment。
这是通过以下三个步骤实现的:
- 定义接口(interface)
- 实现接口(interface)
- 向 fragment 传递消息
因此,我假设您有一个 Activity
,其中包含 Fragment A 和 Fragment B。我们的想法是像您一样在 Fragment A 中创建界面,然后是您的 Activity
必须实现该接口(interface):
public class MyActivity extends Activity implements AlertsAgentDialogFragment.OnDataPass {
@Override
public void onDataPass(String data) {
FragmentB fragment = (FragmentB)getFragmentManager().findFragmentByTag(FragmentB.FRAGMENT_TAG);
if(fragment!=null)
fragment.setYourString(data);
}
}
您的 FragmentB 包含代表 TAG 的常量字符串
public static final String FRAGMENT_TAG = "fragment_b_tag";
要将该标签关联到 FragmentB,当您显示该 fragment 时,您需要执行以下代码:
fragment.show(getFragmentManager(), FragmentB.FRAGMENT_TAG);
而且您的 FragmentB 还需要实现一个方法(我称之为 setYourString())来管理 FragmentA 传递的数据。
之后你就完成了:管理传递的数据的所有逻辑都在 setYourString() 方法中。
关于android - 如何实现从Fragment A到Fragment B的监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37269502/