ButterKnife中如何綁定頭View和腳View

今天遇到了一個問題,給ListView添加HeaderView之後,如何通過ButterKnife綁定HeaderView(FooterView)這個問題,記錄一下。

下面這個代碼片段大家應該都很熟悉:

@BindView(R.id.lv)
    ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        lv.setAdapter(new BaseAdapter() {
            @Override
            public int getCount() {
                return 20;
            }

            @Override
            public Object getItem(int position) {
                return null;
            }

            @Override
            public long getItemId(int position) {
                return 0;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, null);

                TextView tv_item = (TextView) convertView.findViewById(R.id.tv_item);
                tv_item.setText("Demo" + position);
                return convertView;
            }
        });
    }

執行效果:

這裏寫圖片描述

如果讓你添加個頭佈局(腳佈局),是不是so easy,兩行代碼搞定:

View headView = LayoutInflater.from(this).inflate(R.layout.headview, null);
lv.addHeaderView(headView);

這裏寫圖片描述

但是如果你想操作頭佈局裏面的View怎麼辦?於是我就遇到問題了,在哪綁定頭佈局(腳佈局),怎麼綁定?解決辦法如下:

首先,創建一個ViewHolder,把你要操作的View都在裏面綁定:

class HeaderViewHolder {
        @BindView(R.id.tv_headerview)
        TextView tv_headerview;

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

把頭佈局(腳佈局傳進來),獲取ViewHolder實例就可以各種happy操作了:

 HeaderViewHolder headerViewHolder = new HeaderViewHolder(headView);
 headerViewHolder.tv_headerview.setText("我是改變後的文字");

這裏寫圖片描述

點擊下載內含可直接運行Demo不要分

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章