[Android] -Bài 56: ButterKnife ánh xạ hay findviewid tự động trong android

Thảo luận trong 'Android' bắt đầu bởi hieu, 30/3/18.

  1. hieu

    hieu Administrator Thành viên BQT

    Tham gia ngày:
    20/3/18
    Bài viết:
    40
    Đã được thích:
    29
    Điểm thành tích:
    18
    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();
        }
    }
    

     
    Chỉnh sửa cuối: 30/3/18

Chia sẻ trang này

XenForo Add-ons by Brivium ™ © 2012-2013 Brivium LLC.