AS上butterknife插件安裝與使用

在android 開發中,爲了提高開發效率,使用框架是必不可少的。有人選擇自己開發框架使用,也有人選擇使用第三方開源的框架。個人喜歡的框架是KJFrameForAndroid(一個非常好用的框架)。今天在這裏介紹的是butterknife,一款方便的註解框架,幫我們有曉得解決了findViewById及各種view的監聽事件。


(一)安裝初識

首先,在android studio上打開插件安裝的選項,輸入“ Android Butterknife  zelezny ”,安裝好插件並重啓as。

注:插件github地址:android-butterknife-zelezny,在butterknife7.0以後,註解由 @InjectView 改爲了 @Bind。

接着,在build.gradle文件中添加依賴:

compile 'com.jakewharton:butterknife:7.0.1'

在你需要導入註解的Activity或者Fragment或者ViewHolder的layout資源代碼上,右擊,選擇 Generate 然後 Generate ButterKnife Injections,這時候生成類似於下列的選擇框:

Element爲view的類型,ID爲layout中資源的id名字,Variable Name即爲你在代碼中引用出來的變量名,點擊Confirm後即可。

如下圖:





























默認情況下  @InjectView  and  @OnClick 找到控件都是不允許爲空的,否則會拋異常。可以添加  @Optional 允許爲空。爲了避免出現內存泄露,在activity銷燬時記得添加:

ButterKnife.reset(this); 銷燬註解。

(二)、具體使用

1、activity綁定

class ExampleActivity extends Activity {
  @Bind(R.id.title) TextView title;
  @Bind(R.id.subtitle) TextView subtitle;
  @Bind(R.id.footer) TextView footer;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);

  }
}

2、fragment 綁定

public class FancyFragment extends Fragment {
  @Bind(R.id.button1) Button button1;
  @Bind(R.id.button2) Button button2;

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    ButterKnife.bind(this, view);
    return view;
  }
}


3、資源綁定

class ExampleActivity extends Activity {
  @BindString(R.string.title) String title;
  @BindDrawable(R.drawable.graphic) Drawable graphic;
  @BindColor(R.color.red) int red; 
  @BindDimen(R.dimen.spacer) Float spacer; 
  // ...
}


4、adapter綁定

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

    holder.name.setText("John Doe");
    // etc...

    return view;
  }

  static class ViewHolder {
    @InjectView(R.id.title) TextView name;
    @InjectView(R.id.job_title) TextView jobTitle;

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


5、監聽器綁定

@OnClick(R.id.submit)
 public void submit() {
   // TODO submit data to server...
 }




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