OliverLau 2019-06-20
所谓注解式顾名思义就是利用注解的方式将代码抽象化,每次使用只需要传递key和value值就行了,ButterKnife框架将View定义和点击事件很好的进行了注解式抽象,利用它我们不必使用findViewById和setOnClickListener,极大的简化了我们的代码,ButterKnife还对listView的ViewHolder提供了方便的绑定处理。
方便的处理View绑定和Click事件,结构清晰,代码简洁,提供开发效率;
方便处理ListView中ViewHolder的绑定事件;
运行时不会影响app效率,使用配置方便;
代码思路清晰,可读性强
那么应该如何利用注解式框架开发程序呢,请看下面的实例代码:
首先将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 = new MyAdapter(this, list); listView.setAdapter(adapter);
如果看不懂lz杂乱的写法那么就去移驾极客学院吧,很详细的视频教程。