ButterKnife 的簡單使用

 

ButterKnife 可以省去很多的findViewById 代碼

GitHub地址:https://github.com/JakeWharton/butterknife

 

在 Android Studio 中的配置

dependencies {
  implementation 'com.jakewharton:butterknife:8.8.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}


 

到此配置已完成,

Activity ButterKnife.bind(this);必須在setContentView();之後,且父類bind綁定後,子類不需要再bind 
Fragment ButterKnife.bind(this, mRootView); 
屬性佈局不能用private or static 修飾,否則會報錯  @BindView fields must not be private or static.

 

在Activity中綁定使用

public class LoginActivity extends AppCompatActivity{
    @BindView(R.id.email)
    public AutoCompleteTextView mEmailView;
    @BindView(R.id.password)
    public EditText mPasswordView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);
    }
}

在Fragment中使用

public class ButterknifeFragment extends Fragment{  
    private Unbinder unbinder;  
    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
                             Bundle savedInstanceState) {  
        View view = inflater.inflate(R.layout.fragment, container, false);  
        //返回一個Unbinder值(進行解綁),注意這裏的this不能使用getActivity()  
        unbinder = ButterKnife.bind(this, view);  
        return view;  
    }  

    /** 
     * onDestroyView中進行解綁操作 
     */  
    @Override  
    public void onDestroyView() {  
        super.onDestroyView();  
        unbinder.unbind();  
    }  
}

在Adapter 中使用

public class DemoListAdapter extends BaseAdapter {
        public DemoListAdapter() {
            super();
        }
        @Override
        public View getView(int index, View convertView, ViewGroup parent) {
            MyViewHolder myViewHolder ;
            if (convertView == null) {
                convertView = View.inflate(getActivity(), R.layout.list_info_item, null);
                myViewHolder= new MyViewHolder(convertView);
                convertView.setTag(myViewHolder);
            }else {
                myViewHolder = (MyViewHolder) convertView.getTag();
            }
            myViewHolder.title.setText(DEMOS[index].title);
            myViewHolder.desc.setText(DEMOS[index].desc);
            return convertView;
        }
        
        @Override
        public int getCount() {
            return DEMOS.length;
        }

        @Override
        public Object getItem(int index) {
            return DEMOS[index];
        }

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

        class MyViewHolder {
            @BindView(R.id.title)  TextView title;
            @BindView(R.id.desc)  TextView desc;
            public MyViewHolder(View view) {
                ButterKnife.bind(this, view);
            }
        }
    }

綁定監聽事件

@OnClick(R.id.email_sign_in_button)
public void attemptLogin() {
}

 綁定多個監聽事件

@OnClick({R.id.button1 , R.id.button2, R.id.button3})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.button1:
                break;
            case R.id.button2:
                break;
            case R.id.button3:
                break;
        }
    }

 

綁定事件使用R2的綁定id 

這個沒有驗證出來,我使用的是最新的,但是沒有R2 這個東西,記錄說是8.7.0 之後就有的,有待我再來確認

 

@BindView

    @BindView(R.id.tv_html)
    public TextView tv_html ;

@BindViews 

錯誤提示 @BindViews must be a List or array

   @BindViews({R.id.button1 , R.id.button2})
    public List<Button> btnList ;

@BindArray  綁定string裏面array數組;@BindArray(R.array.city ) String[] citys ;

@BindBitmap 綁定圖片資源爲Bitmap;@BindBitmap( R.mipmap.wifi ) Bitmap bitmap;

@BindString 綁定一個String id爲一個String變量;@BindString( R.string.app_name ) String meg;

@BindColor  綁定color;@BindColor(R.color.colorAccent) int black;

@BindDimen  綁定Dimen;@BindDimen(R.dimen.borth_width) int mBorderWidth;

@BindDrawable   綁定Drawable;@BindDrawable(R.drawable.test_pic) Drawable mTestPic;

@BindFloat  綁定float

@BindInt  綁定int

@BindBool  綁定boolean值 


 

ButterKnife的代碼混淆

在混淆文件中,添加如下代碼:

-keep class butterknife.** { *; }  
-dontwarn butterknife.internal.**  
-keep class **$$ViewBinder { *; }  

-keepclasseswithmembernames class * {  
    @butterknife.* <fields>;  
}  

-keepclasseswithmembernames class * {  
    @butterknife.* <methods>;  
}

 

安裝插件

 

安裝完插件後重啓

插件的使用

1. 將光標放在layout佈局文件名字上

2.鼠標右邊選擇Generate 菜單

3.選擇Generate Butterknife Injections 菜單

如果沒有出現這個菜單就是光標選擇位置不對,需要放在佈局文件名字上

4. 根據需要選擇相應的配置

5. 下面是自動生成的代碼

在ondestroyview中我使用的是fragment 會出現一個unbind 方法,需要解除綁定

 

 

 

 

 

 

 

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