我有一个问题,我不能通过一个。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
已改值-->什么也没发生。
谁能给我解释一下是什么错误?
谢谢你的时间。
你应该研究一下ViewModel。ViewModel概述.
你应该在你的父活动中初始化一个ViewModel,然后当每个Fragment被创建时,提供对该公共ViewModel的访问。
然后,所有3个组件将共享访问一个共同的具有生命周期意识的对象,你可以使用它来实现轻松的相互沟通。
这就是解决方案-_-,我不知道为什么之前没有工作。
里面的 FragmentA
在 onClick
方法,把这个贴在最后。
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.nav_host_fragment, galleryFragment);
transaction.addToBackStack(null);
transaction.commit();
我把这个贴出来给需要它的人