butterKnife8.x版本的使用

butterKnife最近又更新了纵散,現(xiàn)在已經(jīng)是8.4版本了,看到一些網(wǎng)上的教程還停留在以前的版本上,于是打算自己總結(jié)下顺呕。


新版本與以前比較大的區(qū)別就是引入了apt插件,在使用配置上有了不同括饶,現(xiàn)在有很多開(kāi)源庫(kù)都引入了apt插件株茶,有時(shí)間可以研究下。然后新版本在API的調(diào)用上也與之前有一點(diǎn)不同图焰,新版本現(xiàn)在支持資源的綁定了启盛,以前是不可以的

  • 引入依賴
    在project/build.gradle里面加入mavenCentral倉(cāng)庫(kù)和apt插件,像這樣:
buildscript {
  repositories {
    mavenCentral()
   }
  dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}

在app/build.gradle里面引入butterKnife和apt插件:

apply plugin: 'android-apt'

android {
...
}

dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
}
這樣就配置完成了


通過(guò)@BindView方式直接注入布局中的控件,例:

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

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

綁定各種資源:

class ExampleActivity extends Activity {
  @BindString(R.string.title) String title;
  @BindDrawable(R.drawable.graphic) Drawable graphic;
  @BindColor(R.color.red) int red; // int or ColorStateList field
  @BindDimen(R.dimen.spacer) Float spacer; // int (for pixel size) or float (for exact value) field
  // ...
}

fragment里面:

public class FancyFragment extends Fragment {
  @BindView(R.id.button1) Button button1;
  @BindView(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);
    // TODO Use fields...
    return view;
  }
}

ViewHolder的綁定:

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.whatever, parent, false);
      holder = new ViewHolder(view);
      view.setTag(holder);
    }

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

    return view;
  }

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

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

綁定多個(gè)控件到一個(gè)集合里面:

@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;

設(shè)置監(jiān)聽(tīng)僵闯,參數(shù)是可選的:

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

監(jiān)聽(tīng)的參數(shù)類(lèi)型自定義卧抗,然后它可以自動(dòng)的強(qiáng)轉(zhuǎn):

@OnClick(R.id.submit)
public void sayHi(Button button) {
  button.setText("Hello!");
}

多個(gè)控件綁定在一個(gè)監(jiān)聽(tīng)中:

@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(DoorView door) {
  if (door.hasPrizeBehind()) {
    Toast.makeText(this, "You win!", LENGTH_SHORT).show();
  } else {
    Toast.makeText(this, "Try again", LENGTH_SHORT).show();
  }
}

自定義控件可以綁定監(jiān)聽(tīng)而不指定id:

public class FancyButton extends Button {
  @OnClick
  public void onClick() {
    // TODO do something!
  }
}

在Fragment里面可以回收綁定:

public class FancyFragment extends Fragment {
  @BindView(R.id.button1) Button button1;
  @BindView(R.id.button2) Button button2;
  private Unbinder unbinder;

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

  @Override public void onDestroyView() {
    super.onDestroyView();
    unbinder.unbind();
  }
}

Listview的item監(jiān)聽(tīng):

@OnItemSelected(R.id.list_view)
void onItemSelected(int position) {
  // TODO ...
}

以上就是butterKnife新版本的使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鳖粟,一起剝皮案震驚了整個(gè)濱河市社裆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌向图,老刑警劉巖泳秀,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異榄攀,居然都是意外死亡嗜傅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)檩赢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吕嘀,“玉大人,你說(shuō)我怎么就攤上這事贞瞒”宜” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵憔狞,是天一觀的道長(zhǎng)蝴悉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瘾敢,這世上最難降的妖魔是什么拍冠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮簇抵,結(jié)果婚禮上庆杜,老公的妹妹穿的比我還像新娘。我一直安慰自己碟摆,他們只是感情好晃财,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著典蜕,像睡著了一般断盛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愉舔,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天钢猛,我揣著相機(jī)與錄音,去河邊找鬼轩缤。 笑死命迈,一個(gè)胖子當(dāng)著我的面吹牛贩绕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播壶愤,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼淑倾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了征椒?” 一聲冷哼從身側(cè)響起娇哆,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤陕靠,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后脱茉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體剪芥,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琴许,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年税肪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榜田。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡益兄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出箭券,到底是詐尸還是另有隱情净捅,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布辩块,位于F島的核電站蛔六,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏废亭。R本人自食惡果不足惜国章,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豆村。 院中可真熱鬧液兽,春花似錦、人聲如沸掌动。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)粗恢。三九已至拟逮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間适滓,已是汗流浹背敦迄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罚屋。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓苦囱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脾猛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撕彤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容