thôi khỏi mở đầu : nghe anh xạ tự động với findviewid tự động là biết rồi vào thẳng chủ đề 1. thêm ButterKnife vào project cây thư mục lập trình app/build.gradle thêm trong dependencies HTML: dependencies { ... // butter knife compile 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' } Mỗi lần dependencies thay đổi nó sẽ android studio tự động build lại app và import vào source. Bây giờ bạn có thể sử dụng thuộc tính @BindView và @onClick của butterknife rồi làm mẫu 1 cái giao diện đi: textview,inputtext và 1 nút button HTML: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical"> <TextView android:id="@+id/lbl_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Enter your email" android:textAllCaps="true" /> <EditText android:id="@+id/input_name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_enter" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/dimen_20" android:text="@string/enter" /> </LinearLayout> 2. Sử dụng butterknife trong Activity - Sử dụng @BindView tìm id của 1 thuộc tính trong layout đó để ánh xạ tự động findviewid mình khỏi cần phải làm công việc này nữa - gọi ButterKnife.bind(this) ở onCreate() sau khi setContentView() được gọi chuyện gì sẽ xảy ra, không cần phải findviewID nữa ko cần phải mình chỉ khai báo bindview ở dưới mình để thuộc tính gì nó tự động hiểu cái mình muốn HTML: public class MainActivity extends AppCompatActivity { @BindView(R.id.lbl_title) TextView lblTitle; @BindView(R.id.input_name) EditText inputName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // bind the view using butterknife ButterKnife.bind(this); } @OnClick(R.id.btn_enter) public void onButtonClick(View view) { Toast.makeText(getApplicationContext(), "You have entered: " + inputName.getText().toString(), Toast.LENGTH_SHORT).show(); } } 3. Sử dụng Butterknife trong Fragment Việc sử dụng injection này trong fragment cũng giống như ở Activity cũng phương thức ButterKnife.bind(), tuy nhiên thêm vào đó bạn cần bỏ thêm vào đó param inflated view bạn cũng cần thêm phương thức Unbinder để giải phóng các butterknife sau khi kết thúc fragment ở hàm onDestroyView() bởi vì vòng đời trong fragment được hiểu là sub-activity ko khai tử hậu quả về sau ai biết được HTML: public class MyFragment extends Fragment { Unbinder unbinder; @BindView(R.id.lbl_name) TextView lblName; @BindView(R.id.btn_enter) Button btnEnter; @BindView(R.id.input_name) EditText inputName; public MyFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_my, container, false); // bind view using butter knife unbinder = ButterKnife.bind(this, view); return view; } @Override public void onDestroyView() { super.onDestroyView(); // unbind the view to free some memory unbinder.unbind(); } }