无法从RecyclerView.Adapter获取Fragment Manager

时间:2018-10-22 00:05:27

标签: android android-recyclerview fragmentmanager

我正在尝试从回收站视图过渡到目标片段,但似乎无法让片段管理器执行此操作。尝试构建时,出现以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentManager android.support.v7.app.AppCompatActivity.getSupportFragmentManager()' on a null object reference

下面的代码是导致错误的原因,特别是getSupportManager()行。

public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
    final Course course = courses.get(i);
    if (course != null)
    {
        viewHolder.course = course;
        viewHolder.tvLine1.setText(course.getName());
        viewHolder.tvLine2.setText(course.getCourse_code());
        viewHolder.view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager fm = ((AppCompatActivity) context).getSupportFragmentManager();
                CourseViewFragment viewFragment = new CourseViewFragment();
                Bundle args = new Bundle();
                args.putString("CourseID", course.getId());
                args.putString("CourseName", course.getName());
                args.putString("CourseCode", course.getCourse_code());
                args.putString("StartAt", course.getStart_at());
                args.putString("EndAt", course.getEnd_at());
                viewFragment.setArguments(args);
                fm.beginTransaction()
                        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                        .add(android.R.id.content, viewFragment)
                        .addToBackStack(null)
                        .commit();
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

问题不在您的适配器中。单击该项目时上下文似乎为空。

通常是由被破坏的活动引起的。这是一种情况:

  1. 适配器通过构造函数或setter接收上下文,并保留对活动的引用。
  2. 由于某种原因(用户操作,内存不足等),活动被破坏
  3. 适配器具有的上下文为 null
  4. 您将获得NPE。

因此,请检查您在哪里呼叫适配器。也许答案就在那里。