android - 如何实现从Fragment A到Fragment B的监听器?

标签 android android-fragments android-recyclerview

我在一个 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。

这是通过以下三个步骤实现的:

  1. 定义接口(interface)
  2. 实现接口(interface)
  3. 向 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/

相关文章:

c# - 从日期时间到当前时区的 Unix 纪元时间的转换

android - 在Android中将一个 fragment 滑过另一个 fragment

android - 折叠工具栏 - 禁用触摸滚动

android - Glide - RecyclerView 中的不同圆角

android - Dagger2 中 @Binds 与 @Provides 注释的用例是什么

android - 定位权限回调一次又一次被调用

java.lang.ClassCastException : cast to created interface issue?

android - RecyclerView 未显示列表,但数据正在馈送到适配器

android - 将字符串值从自定义对话框传递到另一个 Activity

java - 在 Fragment 的 onAttach(Activity) 中存储 Activity