● Butterknife
○ butterknife是在编译时,解析的注解
○ 只是通过注解解析器,生成了一套与原来的类几乎相同的代码
○ 生成时机,就是在编译的时候
○ 运行的时候,实际上运行的是重新生成的代码
module gradle
apply plugin: 'com.jakewharton.butterknife'
dependencies {
compile 'com.jakewharton:butterknife:8.5.1'
// 编译的时候的注解解析器,生成一套新的代码
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}
根gradle
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
}
例子
public class MainActivity extends AppCompatActivity {
@BindView(R.id.tv_test1)
TextView tvTest;
@BindView(R.id.btn_test1)
Button btnTest;
@BindView(R.id.et_test1)
EditText etTest1;
@BindView(R.id.frameLayout)
FrameLayout frameLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
tvTest.setText("文本控件已被初始化");
btnTest.setText("按钮被初始化");
}
@OnClick(R.id.btn_test1)
public void onclick(View view) {
btnTest.setText("我被点击了");
tvTest.setText("夕阳西下几时回");
FragmentManager supportFragmentManager = getSupportFragmentManager();
supportFragmentManager.beginTransaction().add(R.id.frameLayout, new MFragment()).commit();
}
}
```**fragment**
<div class="se-preview-section-delimiter"></div>
public class MFragment extends Fragment {
private List<String> list = new ArrayList<>();
Unbinder unbinder;
@BindView(R.id.lv_test1)
ListView lvTest1;
private View inflate;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
inflate = inflater.inflate(R.layout.frag1, container, false);
initData();
unbinder = ButterKnife.bind(this, inflate);
lvTest1.setAdapter(new Madapter(list,getActivity()));
return inflate;
}
private void initData() {
for (int i = 0; i < 20; i++) {
list.add("李强" + i);
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
}
“`
public class MFragment extends Fragment {
private List<String> list = new ArrayList<>();
Unbinder unbinder;
@BindView(R.id.lv_test1)
ListView lvTest1;
private View inflate;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
inflate = inflater.inflate(R.layout.frag1, container, false);
initData();
unbinder = ButterKnife.bind(this, inflate);
lvTest1.setAdapter(new Madapter(list,getActivity()));
return inflate;
}
private void initData() {
for (int i = 0; i < 20; i++) {
list.add("Coco" + i);
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
}
adapter
public class Madapter extends BaseAdapter {
private List<String> list;
private Context context;
public Madapter(List<String> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
Log.d(TAG, "getView: ++++++++++++++"+list.size());
ViewHolder viewHolder = null;
if (view == null) {
view = View.inflate(context, R.layout.item, null);
viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.getTextView().setText(list.get(i));
return view;
}
class ViewHolder{
@BindView(R.id.item_tv)
TextView textView;
public ViewHolder(View view) {
ButterKnife.bind(this, view);
}
public TextView getTextView() {
return textView;
}
}
}