Невозможно получить Fragment Manager из RecyclerView.Adapter - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь перейти из представления переработчика в целевой фрагмент, но мне кажется, что я не могу заставить менеджер фрагментов сделать это.Когда я пытаюсь построить, я получаю следующую ошибку:

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 голосов
/ 22 октября 2018

Проблема не в вашем адаптере.Кажется, что контекст является нулевым, когда вы щелкаете элемент.

Обычно это вызвано уничтоженными действиями .Вот один из сценариев:

  1. Адаптер получает контекст через конструктор или установщик и сохраняет ссылку на действие.
  2. Операция по какой-то причине уничтожена (действие пользователя, нехватка памятии т. д.)
  3. Контекст, который имеет адаптер, становится нулевым
  4. Вы получаете NPE.

Поэтому, пожалуйста, проверьте, где вы вызываете адаптер,Может быть, ответ там.

...