推薦一個Android開發懶人庫 -- ButterKnife

來源:互聯網
上載者:User

標籤:

ButterKnife

  -- 項目地址:https://github.com/JakeWharton/butterknife

都說程式員都是比較懶的,什麼事情都想著讓程式自動化幫忙減輕工作量,這個開源庫可以讓我們從大量的findViewById()和setonclicktListener()解放出來。

 

 

解放控制項對象執行個體化

也就是 findViewById(),一直以來的做法都是一個個定義,然後在 setContentView() 或 inflate() 之後一一來findViewById()進行執行個體化,而使用 ButterKnife,你只需要在代碼中 使用註解方式進行對象申明,然後在 setContentView() 或 inflate() 之後調用一句話,那麼申明的所有對象自動建立出來。

 1     @InjectView(R.id.ok_btn) //控制項對應的ID 2     Button mBtn; 3  4     @InjectView(R.id.title_text) 5     TextView mTitleTextView; 6  7     @Override 8     protected void onCreate(Bundle savedInstanceState) { 9         super.onCreate(savedInstanceState);10         setContentView(R.layout.main_activity);11 12         ButterKnife.inject(this);13 14         //這樣之後就可以直接使用變數了15         mTitleTextView.setText("test");16 17     }

 

是不是很神奇!!!

Fragment的和adapter裡也可以用,不過調用時要多加一個root view參數。

Fragegment使用時記得同時繼承onDestroyView,並在其中將ButterKnife.reset 

 

 1 public class FancyFragment extends Fragment { 2   @InjectView(R.id.button1) Button button1; 3   @InjectView(R.id.button2) Button button2; 4  5   @Override View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 6     View view = inflater.inflate(R.layout.fancy_fragment, container, false); 7     ButterKnife.inject(this, view); 8     // TODO Use "injected" views... 9     return view;10   }11 }12 13   @Override void onDestroyView() {14     super.onDestroyView();15     ButterKnife.reset(this);16   }

 

還可以執行個體化控制項數組,註解多一個s,也就是 InjectViews

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

 

解放監聽添加

如下,可以直接為 R.id.submit這個控制項添加OnClickListener為submit函數,流弊啊。。。

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

還可以批量為多個控制項添加為同一個響應函數:

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

 

具體的可以去看該大神的項目頁面。在文前已給出。

註:最新版的庫已經將方法名改了,當然也是相容上面所列的例子的。最新樣本如下:

 1 class ExampleActivity extends Activity { 2   @FindView(R.id.user) EditText username; 3   @FindView(R.id.pass) EditText password; 4  5   @OnClick(R.id.submit) void submit() { 6     // TODO call server... 7   } 8  9   @Override public void onCreate(Bundle savedInstanceState) {10     super.onCreate(savedInstanceState);11     setContentView(R.layout.simple_activity);12     ButterKnife.bind(this);13     // TODO Use fields...14   }15 }

 

推薦一個Android開發懶人庫 -- ButterKnife

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.