NullPointerException на панели инструментов в RecyclerView - PullRequest
0 голосов
/ 31 августа 2018

Я создаю приложение типа социальных сетей и для основного канала. Я использую CardView с Toolbar внутри, чтобы легко дать мне возможность добавить меню параметров для удаления, редактирования или сообщения о сообщении. .

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

Проблема, с которой я столкнулся, заключается в том, что класс PostViewHolder выбрасывает NullPointerException на Toolbar при нажатии на фотографию профиля пользователя и попытке приложения запустить его профиль.

Весь этот процесс работал до того, как я добавил Toolbar в CardView, я просто пытался очистить свой подход к постам и добавить немного больше:

me: FATAL EXCEPTION: main
              Process: com.apexsoftware.quotable, PID: 6821
              java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.Toolbar.inflateMenu(int)' on a null object reference
                  at com.apexsoftware.quotable.adapter.holders.PostViewHolder.<init>(PostViewHolder.java:80)
                  at com.apexsoftware.quotable.adapter.PostsByUserAdapter.onCreateViewHolder(PostsByUserAdapter.java:41)

Вот мой PostViewHolder класс:

public PostViewHolder(View view, final OnClickListener onClickListener, boolean isAuthorNeeded) {
    super(view);
    this.context = view.getContext();

    likesCounterTextView = (TextView) view.findViewById(R.id.tv_like_count);
    likesImageView = (ImageView) view.findViewById(R.id.iv_like);
    dateTextView = (TextView) view.findViewById(R.id.tv_date);
    userTextView = (TextView) view.findViewById(R.id.tv_user);
    quoteTextView = (TextView) view.findViewById(R.id.tv_quote);
    authorImageView = (ImageView) view.findViewById(R.id.iv_profile);
    postToolbar = view.findViewById(R.id.post_toolbar);

    authorImageView.setVisibility(isAuthorNeeded ? View.VISIBLE : View.GONE);

    postToolbar.inflateMenu(R.menu.menu_post);

    //profileManager = ProfileManager.getInstance(context.getApplicationContext());
    postManager = PostManager.getInstance(context.getApplicationContext());
    userManager = UserManager.getInstance(context.getApplicationContext());

    /*view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int position = getAdapterPosition();
            if (onClickListener != null && position != RecyclerView.NO_POSITION) {
                onClickListener.onItemClick(getAdapterPosition(), v);
            }
        }
    });*/

    likesImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int position = getAdapterPosition();
            if (onClickListener != null && position != RecyclerView.NO_POSITION) {
                onClickListener.onLikeClick(likeController, position);
            }
        }
    });

    authorImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int position = getAdapterPosition();
            if (onClickListener != null && position != RecyclerView.NO_POSITION) {
                onClickListener.onAuthorClick(getAdapterPosition(), v);
            }
        }
    });
}

Вот мой PostByUserAdapter класс:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View view = inflater.inflate(R.layout.row_post, parent, false);
    toolbar = view.findViewById(R.id.post_toolbar);

    return new PostViewHolder(view, createOnClickListener(), false);
}

1 Ответ

0 голосов
/ 31 августа 2018

Здесь:

postToolbar.inflateMenu(R.menu.menu_post);

Вы накачиваете menu, и вы получили Toolbar id-объект , как вы можете видеть. Это должен быть ваш menu, если вы надуваете menu.

Существует также уже инициализированный Toolbar ( с тем же i d) в вашем RecyclerView.ViewHolder:

toolbar = view.findViewById(R.id.post_toolbar);

В любом случае, почему вы инициализируете Toolbar в PostViewHolder или onCreateViewHolder? Это не должно быть там, хотя. Вы можете захотеть прочитать что на самом деле Toolbar является .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...