У меня проблема, я не могу передать значение 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
РЕЗЮМЕ:
Я нахожусь на fragmentA
-> Я нажимаю кнопку -> Я перехожу на fragmentB
, чтобы посмотреть, изменилось ли значение TextView
-> ничего не произошло.
Может кто-нибудь объяснить мне, в чем ошибка?
Спасибо за ваше время.