导航抽屉活动:在片段之间传递值

问题描述 投票:0回答:1

我有一个问题,我不能通过一个。String 价值来自 Fragment 给另一个 Fragment.

这是我代码的一部分。

这是我代码的一部分: FragmentA:

public class HomeFragment extends Fragment {

private HomeViewModel homeViewModel;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    homeViewModel =
            ViewModelProviders.of(this).get(HomeViewModel.class);
    View root = inflater.inflate(R.layout.fragment_home, container, false);

    Button btn = (Button) root.findViewById(R.id.myButton);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            GalleryFragment galleryFragment = new GalleryFragment();
            Bundle bundle = new Bundle();
            String s = "ciao";
            bundle.putString("Data", s);
            galleryFragment.setArguments(bundle);
            Toast.makeText(getActivity(),s,Toast.LENGTH_LONG).show(); //with this i know the function is ok
        }
    });
    return root;
}
}

负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: FragmentB:

public class GalleryFragment extends Fragment {

private GalleryViewModel galleryViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    galleryViewModel =
            ViewModelProviders.of(this).get(GalleryViewModel.class);
    View root = inflater.inflate(R.layout.fragment_gallery, container, false);

    Bundle bundle = getActivity().getIntent().getExtras();
    TextView textView = (TextView) root.findViewById(R.id.myTitleText);
    if(bundle!=null){
        String name = bundle.getString("Data");
        Toast.makeText(getActivity(),name,Toast.LENGTH_LONG).show();
        textView.setText(name);
    }
    return root;
}
}

如果我删除 if(bundle!=null) 部分,调试器给我这个错误。

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference

SUMMARY:

我是在 fragmentA --> 我点击按钮 --> 我移到了 fragmentB 看看 TextView 已改值-->什么也没发生。

谁能给我解释一下是什么错误?

谢谢你的时间。

java android navigation-drawer
1个回答
0
投票

你应该研究一下ViewModel。ViewModel概述.

你应该在你的父活动中初始化一个ViewModel,然后当每个Fragment被创建时,提供对该公共ViewModel的访问。

然后,所有3个组件将共享访问一个共同的具有生命周期意识的对象,你可以使用它来实现轻松的相互沟通。


0
投票

这就是解决方案-_-,我不知道为什么之前没有工作。

里面的 FragmentAonClick 方法,把这个贴在最后。

            FragmentTransaction transaction = getFragmentManager().beginTransaction();

            transaction.replace(R.id.nav_host_fragment, galleryFragment);
            transaction.addToBackStack(null);

            transaction.commit();

我把这个贴出来给需要它的人

© www.soinside.com 2019 - 2024. All rights reserved.