簡體   English   中英

Navigation Drawer Activity:在片段之間傳遞值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM