首页 > 解决方案 > 使用 Bundle 将数据从 Fragment 传输到 Fragment,并使用相同的密钥从另一个 Fragment 读取数据

问题描述

我的应用程序中有 4 个。在First基于某些条件的片段上,我将数据从片段传输FirstThirdFourth。我正在传递数据,并在Bundles整个片段中使用相同的键名读取数据。但我无法接收从其他屏幕发送的片段发送的数据。这是使用来自 Fragment
的条件和发送数据的代码BundleFirst

saveSession.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    if(feedbackAction.equals("rating_good")) {
                        bundle.putString("id", myId);
                        bundle.putString("No", no);
                        fdb.setArguments(bundle);
                        tx = fm.beginTransaction();
                        tx.replace(R.id.frame,fdb);
                        tx.addToBackStack("TabInfo");
                        tx.commit();
                    } else if(feedbackAction.equals("rating_bad")) {
                         bundle.putString("id", myId);
                        bundle.putString("No", no);
                        fdb.setArguments(bundle);
                        tx = fm.beginTransaction();
                        tx.replace(R.id.frame,bfd);
                        tx.addToBackStack("TabInfo");
                        tx.commit();
                    }

            }
        });  

Second这是从Fragment 检索数据的代码

id=getArguments().getString("id");
    my_no=getArguments().getString("No");  

Fourth这是从片段 中检索数据的代码

id=getArguments().getString("id");
        my_no=getArguments().getString("No"); 

但是我收到错误,因为
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.BaseBundle.getString(java.lang.String)' on a null object reference
如何使用相同的键在其他片段中检索此 Bundle 数据?

标签: androidandroid-fragmentsandroid-bundle

解决方案


作为一般规则,您可以遵循,为 ui 使用片段并处理片段,活动中的活动更改。您可以做的是创建一个接口并在使用这样的片段的活动中实现该接口。

 public interface OnActionClickedListener {

        void onSessionClicked(String name);

    }

在您的片段中,您需要初始化此侦听器。

OnActionClickedListener onActionClickedListener;

  @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            onActionClickedListener = (MyFragment.OnActionClickedListener) context;
        } catch (Exception e) {
            throw new ClassCastException();
        }

    }

现在在片段上的 onClickListener 中,您可以调用

onActionClickedlistener.onSessionClicked("string you want to enter");

最后,您的活动应该扩展 MyFragment.OnActionClickedListener 并实现 onSessionClicked 方法,您将在其中更改显示的片段。您可以轻松地从片段中获取活动中的数据。这样,如果另一个活动使用您的片段,该活动也可以根据需要实现 onActionClickedListener。


推荐阅读