[英]Navigation Drawer Activity: passing values between fragment
我有一個問題,我無法將String
值從Fragment
傳遞到另一個Fragment
。
這是我的代碼的一部分:
FragmentA
A:
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
B:
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
概括:
我在fragmentA
--> 我單擊按鈕 --> 我移動到fragmentB
以查看TextView
是否更改了值 --> 沒有發生任何事情。
有人可以解釋一下錯誤是什么嗎?
感謝您的時間。
您應該查看 ViewModel: ViewModel Overview 。
您應該在父活動中初始化 ViewModel,然后在創建每個 Fragment 時,提供對該公共 ViewModel 的訪問。
然后,所有 3 個組件將共享訪問一個具有生命周期意識的通用 object,您可以使用它來輕松進行相互通信。
這是解決方案-_-,我不知道為什么之前沒有工作。
在onClick
方法中的FragmentA
內部,在最后粘貼:
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.nav_host_fragment, galleryFragment);
transaction.addToBackStack(null);
transaction.commit();
我發這個給需要的人
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.