Я получаю ошибку ссылки на нулевой объект при передаче данных из одного фрагмента в другой - PullRequest
1 голос
/ 06 марта 2020

Я отправляю целочисленное значение из одного фрагмента в другой, но получаю ошибку ссылки на нулевой объект при выполнении. Ниже я публикую свои два класса фрагментов и один класс ViewModel, куда я передаю данные.

Я использую эту поддержку для отправки данных другим фрагментам

RowViewModel.Class
         {
                    public BindableString albumName = new BindableString();
                    public BindableString albumDate = new BindableString();
                    public BindableString albumYear = new BindableString();
                    public BindableString albumMonth = new BindableString();
                    int position;
                    HappyMomentFragment happyMomentFragment;
                    ArrayList<RowHappyMomentViewModel> arrayList;
                    public static String TAG = "RowHappyMomentViewModel";

                  public RowHappyMomentViewModel(HappyMomentFragment happyMomentFragment, in position) {
                   this.happyMomentFragment = happyMomentFragment;
                   this.position = position;
                               }

                      public void onRowClick(View view) {
                      Bundle bundle=new Bundle();
                      bundle.putInt("Position", position);
                      happyMomentFragment.setArguments(bundle);
                      HappyMomentDetailFragment.addFragment((BaseActivity) 
                      happyMomentFragment.getActivity());
                      //Log.e(TAG, "position " + position);
    }
}

Из этого класса я отправляю данные.

HappyMomentFragment.class                                         
  {
        HappyMomentViewModel mViewModel;
        FragmentHappyMomentBinding binding;
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mViewModel = new HappyMomentViewModel(this);
    }
   @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_happy_moment, container, false);
        binding.setVm(mViewModel);
        ((BaseActivity) getActivity()).setToolbarVisibility(false);
        return binding.getRoot();

    }

    public static void addFragment(BaseActivity activity) {
        activity.replaceFragment(new HappyMomentFragment(), true);
    }

 **I am receiving the data in this class**




HapppyMomentDetailFragment.class{

    HappyMomentDetailViewModel mViewModel;
    FragmentHappyMomentDetailBinding binding;
    public final String TAG = "HappyMomentDetailFragment";
    int position;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mViewModel = new HappyMomentDetailViewModel(this);
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_happy_moment_detail, container, false);
        binding.setVm(mViewModel);
        Bundle args=getArguments();
        position = args.getInt("Position");
        ViewPager viewPager = binding.getRoot().findViewById(R.id.view_pager);
        TabLayout tabLayout = binding.getRoot().findViewById(R.id.tab_layout);
        tabLayout.setupWithViewPager(viewPager);
        ((BaseActivity) getActivity()).setToolbarVisibility(false);
        Log.e(TAG, "position " + position);
        return binding.getRoot();
    }

    public static void addFragment(BaseActivity activity) {
        activity.replaceFragment(new HappyMomentDetailFragment(), true);
    }

}

1 Ответ

1 голос
/ 06 марта 2020
public static void addFragment(BaseActivity activity) {
    activity.replaceFragment(new HappyMomentFragment(), true);
}

Здесь вы игнорируете ранее созданный фрагмент и добавляете новый без аргументов, на самом деле вы должны изменить его на

public static void addFragment(BaseActivity activity, Fragment fragment) {
    activity.replaceFragment(fragment, true);
}

И вы называете, что используете созданный вами экземпляр:

                  happyMomentFragment.setArguments(bundle);
                  HappyMomentDetailFragment.addFragment((BaseActivity) 
                  happyMomentFragment.getActivity(), happyMomentFragment);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...