[Android] Android Butterknife 8.8.1 在 Activity 和 Fragment 、 Adapter 中的使用


ButterKnife是一個專注於Android系統的View注入框架,以前總是要寫很多findViewById來找到View對象,有了ButterKnife可以很輕松的省去這些步驟。是大神JakeWharton的力作,目前使用很廣。最重要的一點,使用ButterKnife對性能基本沒有損失,因為ButterKnife用到的注解並不是在運行時反射的,而是在編譯的時候生成新的class。項目集成起來也是特別方便,使用起來也是特別簡單。

一、引入依賴

app/build.gradle 中 引入:

compile "com.jakewharton:butterknife:8.8.1"
compile "com.jakewharton:butterknife-compiler:8.8.1"

 

二、在Activity中綁定ButterKnife

public class MainActivity extends AppCompatActivity{  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        //綁定初始化ButterKnife  
        ButterKnife.bind(this);  
    }  
} 

 

注意:ButterKnife.bind(this);必須在setContentView();之后綁定

 

三、在Fragment中綁定ButterKnife

Fragment的生命周期不同於activity。在onCreateView中綁定一個Fragment時,在onDestroyView中將視圖設置為null。當你調用bind來為你綁定一個Fragment時,Butter Knife會返回一個Unbinder的實例。在適當的生命周期(onDestroyView)回調中調用它的unbind方法進行Fragment解綁。使用ButterKnife.bind(this, view)進行綁定。


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中綁定ButterKnife
在Adapter的ViewHolder中使用,將ViewHolder加一個構造方法,在new ViewHolder的時候把view傳遞進去。使用ButterKnife.bind(this, view)進行綁定,代碼如下:
 
 
public class MyAdapter extends BaseAdapter {  

  @Override   
  public View getView(int position, View view, ViewGroup parent) {  
    ViewHolder holder;  
    if (view != null) {  
      holder = (ViewHolder) view.getTag();  
    } else {  
      view = inflater.inflate(R.layout.testlayout, parent, false);  
      holder = new ViewHolder(view);  
      view.setTag(holder);  
    }  

    holder.name.setText("Donkor");  
    holder.job.setText("Android");
    // etc...  
    return view;  
  }  

  static class ViewHolder {  
    @BindView(R.id.title) TextView name;  
    @BindView(R.id.job) TextView job;  

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

 

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/10699570.html

轉載請著名出處!謝謝~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM