【问题标题】:I am getting null object reference error whiile passing data to one fragment to another将数据传递到一个片段到另一个片段时出现空对象引用错误
【发布时间】:2020-03-06 18:24:56
【问题描述】:

我正在将一个整数值从一个片段发送到另一个片段,但在执行时出现空对象引用错误。下面我发布了我的两个片段类和一个 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);
    }

}

【问题讨论】:

  • HappyMomentDetailFragment 和 FragmentTwo 是同一个类吗?
  • 不,他们不是
  • 所以你没有为正确的类设置参数
  • 你能解释一下我在这方面很新

标签: android android-fragments fragment


【解决方案1】:
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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多