【Android 進階】ButterKnife-黃油刀

現在養成了一個好習慣,每當我學習了一個新東西,總想要記錄下來。記錄的過程其實就是對知識的一次梳理,可以查漏補缺。
而記錄下來也是爲了方便以後的重溫,畢竟人的遺忘曲線還是很恐怖的。

黃油刀-ButterKnife是什麼?

ButterKnife是註解框架中相對簡單易懂的很不錯的開源框架

爲什麼要學習並使用ButterKnife呢?

1.強大的View綁定和Click事件處理功能,簡化代碼,提升開發效率
2.方便的處理Adapter裏的ViewHolder綁定問題
3.運行時不會影響APP效率,使用配置方便
4.代碼清晰,可讀性強

開源地址:

https://github.com/JakeWharton/butterknife

使用準備:

1)在Setting->Plugins中輸入butterknife添加插件
Android ButterKnife Aelezny ->點擊安裝
這裏寫圖片描述
2)在Module裏的build.gradle裏面添加
compile ‘com.jakewharton:butterknife:7.0.1’

常用功能:

1.省略findViewById()
(1)Activity中使用
**以前:**mTextView = (TextView) findViewById(R.id.butter_text_view);

現在:
@InjectView(R.id.butter_text_view_2)
TextView mTextView2;
在設置好佈局之後調用:
ButterKnife.inject(this);當前視圖與ButterKnife綁定。

注意:
View變量聲明的時候不能爲private或者static.

(2)Fragment中使用
示例代碼:

public class SimpleFragment extends Fragment {

    @InjectView(R.id.fragment_text_view)
    TextView mTextView;

    public SimpleFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_simple, container, false);
        ButterKnife.inject(this, view);
        mTextView.setText("在使用黃油刀");
        return view;
    }
}

(3)Adapter ViewHolder中使用
示例代碼:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.person_item_layout, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        Person person = getItem(position);
        if (null != person) {
            holder.name.setText(person.getName());
            holder.age.setText(String.valueOf(person.getAge()));
            holder.location.setText(person.getLocation());
            holder.work.setText(person.getWork());
        }

        return convertView;
    }

    static class ViewHolder {
        @InjectView(R.id.person_name)
        TextView name;
        @InjectView(R.id.person_age)
        TextView age;
        @InjectView(R.id.person_location)
        TextView location;
        @InjectView(R.id.person_work)
        TextView work;

        public ViewHolder(View view) {
            ButterKnife.inject(this, view);
        }
    }

2.省略setOnClickListener()
以前:

mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

現在:

@OnClick(R.id.button)
void doSomethings(View view) {  //參數可以省略
        dothings();
    }
.
.
.
ButterKnife.inject(this);//佈局文件與黃油刀最終綁定

注意:
1.這裏方法仍然不能是private和static, 並且可以有一個參數View,也可不寫.
2.ListView的點擊@OnItemClick, CheckBox的@OnCheckedChanged也可以實現省略操作

3.可以一次指定多個id,爲多個View綁定一個事件處理方法
示例:

@OnClick({R.id.button_1, R.id.button_2, R.id.button_3, R.id.button_4})
void buttonsClicked() {
    Toast.makeText(this, "四個按鈕同一個效果哈", Toast.LENGTH_SHORT).show();
} 
發佈了89 篇原創文章 · 獲贊 37 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章