Доступ к элементам заголовка навигации с помощью ButterKnife

У меня есть класс, который обрабатывает выбор символов из RecyclerView, и все работает, но я хочу обновить текст элементов в заголовке NavigationView правильной информацией. До сих пор я пытался использовать ButterKnife для решения этой проблемы, но безуспешно. Тем не менее, я смог заставить его работать следующим образом:

private ImageView mImageView;
private TextViewTitle mTextViewName;
private TextViewRegular mTextViewTitle;
private static View mHeaderView;

public void setHeaderView(View headerView) {
    mHeaderView = headerView;
    selectedCharacterInstance.setHeaderViewElements();
}

private void setHeaderViewElements() {
    mImageView = mHeaderView.findViewById(R.id.selected_character_info1);
    mTextViewName = mHeaderView.findViewById(R.id.selected_character_info2);
    mTextViewTitle = mHeaderView.findViewById(R.id.selected_character_info3);
}

Я передаю headerView из MainActivity. Мне не нравится такой подход, но я могу ошибаться, так как я новичок в программировании для Android. Это правильный подход? Есть ли способ решить эту проблему с помощью ButterKnife? (Я пробовал ButterKnife, но ImageView и TextView всегда были нулевыми)


person rock_crusher    schedule 31.03.2018    source источник


Ответы (1)


Я также использую Butter Knife для заголовка навигации. Для заголовка я создаю держатель представления:

protected static class HeaderViewHolder {

    @BindView(R.id.user_name)
    protected TextView mUserNameTxt;

    @BindView(R.id.user_email)
    protected TextView mUserEmailTxt;

    HeaderViewHolder(View view) {
        ButterKnife.bind(this, view);
    }
}

Затем в методе onCreate моей деятельности:

View header = mNavigationView.getHeaderView(0);
mHeaderViewHolder = new HeaderViewHolder(header);

mHeaderViewHolder.mUserEmailTxt.setText(userEmail);

Это позволяет мне использовать mHeaderViewHolder как любой другой держатель RecyclerView.

person Anton Makov    schedule 01.04.2018