使用ButterKnife访问导航标题元素

时间:2018-03-31 23:33:41

标签: android 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);
}

我从MainActivity传递headerView。我不喜欢这种方法,但我可能错了,因为我对Android编程很新。这是正确的方法吗?有没有办法用ButterKnife解决这个问题? (我尝试过ButterKnife,但ImageView和TextViews总是为空)

1 个答案:

答案 0 :(得分:4)

我还使用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);

这允许我像任何其他RecyclerView持有者一样使用mHeaderViewHolder