ButterKnife注解式框架簡介
所謂注解式顧名思義就是利用注解的方式將代碼抽象化,每次使用只需要傳遞key和value值就行了,ButterKnife框架將View定義和點擊事件很好的進行了注解式抽象,利用它我們不必使用findViewById和setOnClickListener,極大的簡化了我們的代碼,ButterKnife還對listView的ViewHolder提供了方便的綁定處理。
ButterKnife的特點
1,方便的處理View綁定和Click事件,結構清晰,代碼簡潔,提供開發效率;
2,方便處理ListView中ViewHolder的綁定事件;
3,運行時不會影響app效率,使用配置方便;
4,代碼思路清晰,可讀性強
那么應該如何利用注解式框架開發程序呢,請看下面的實例代碼:
首先將jar包復制到程序的libs里面,然后進行配置:
1.勾選Annotation里面的Enable project specific setting
2.勾選Factory Path里面的Enable project specific setting
Add JARs
配置完成后開始寫代碼:
首先聲明view
@InjectView (R.id.tv1)
TextView tv1;
@InjectView(R.id.tv2)
TextView tv2;
給View設置點擊監聽事件:
@OnClick({R.id.tv1,R.id.tv2})
public void test(View v)
{
if(v.getId()==R.id.tv1)
{
Toast.makeText(this, "你好", 1).show();
}else if(v.getId()==R.id.tv2){
Toast.makeText(this, "你好2", 1).show();
}
}
在onCreate(Bundle savedInstanceState)里面注冊
ButterKnife.inject(this);
這樣View的點擊事件就OK了。
然后就是在listView綁定ViewHolder:
自己寫一個Adapter類繼承BaseAdapter
定義一個內部類:
class ViewHolder{
@InjectView(R.id.itemTv)
TextView tv;
@InjectView(R.id.itemBt)
Button bt;
public ViewHolder(View v){
ButterKnife.inject(this,v);
}
}
在getView方法里面:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView==null)
{
convertView = View.inflate(context, R.layout.item, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.tv.setText(list.get(position));
holder.bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "button", 1).show();
}
});
return convertView;
}
在MainActivity注冊綁定自定義的Adapter就可以了:
MyAdapter adapter =newMyAdapter(this,list);? ? ? ? listView.setAdapter(adapter);
如果看不懂lz雜亂的寫法那么就去移駕極客學院吧,很詳細的視頻教程。