Penggunaan Butter Knife Library sebagai ViewBinding - AndroPath - Tutorial Android Development
Penggunaan Butter Knife Library sebagai ViewBinding

Penggunaan Butter Knife Library sebagai ViewBinding

Share This

Bismillaah,

Butter Knife merupakan sebuah library untuk menginjeksi view ke dalam activity atau fragment melalui anotation nya. Artinya, dengan injeksi view ini, kita tidak perlu lagi menggunakan findViewById() untuk menginisialisasi view object kita.

Selain injeksi view, juga ada beberapa fungsi annotation lain yang disediakan oleh butterknife, seperti misalnya kita bisa binding string, dimension, drawable, event dan lainnya.

Baik, berikut ini kita akan coba dan lihat beberapa kegunaan annotation butterknife untuk kemudahan ngoding kita.

Tambah Dependencies

Tambah dependencies berikut untuk menggunakan butterknife :

dependencies {
  compile 'com.jakewharton:butterknife:8.8.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}

Penggunaan (Activity)

Untuk kali ini kita akan mencoba 2 annotation, yaitu @BindView dan @OnClick.

Kita buat contoh layoutnya seperti berikut : 


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Silahkan inputkan nama :" />

    <EditText
        android:id="@+id/edt_inputName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"/>
    
    <Button
        android:id="@+id/btn_simpan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Simpan"/>
</LinearLayout>
Nah, biasanya kita akan menginisialisasi object view diatas dengan menggunakan findViewById(), tetapi dengan butter knife kita bisa mengganti nya dengan @BindView. Untuk menggunakannya, kita harus :

1. Menggunakan @BindView untuk menginisialisasi view dengan (R.id.namaid) 
2. Memanggil ButterKnife.bind(this) di dalam method onCreate().

public class TestMain extends AppCompatActivity {

    // penggunaan bindview
    @BindView(R.id.tv_name)
    TextView tvName;

    @BindView(R.id.edt_inputName)
    EditText edtInputName;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // pertama bind dulu butterknife di dalam method onCreate()
        ButterKnife.bind(this);
    }

    // penggunaan bindevent
    @OnClick(R.id.btn_simpan)
    public void onButtonClick(View view){
        Toast.makeText(this, "Input Nama : " + edtInputName.getText().toString(),
                Toast.LENGTH_LONG).show();
    }
}

Penggunaan (Fragment) 

Untuk penggunaan dalam fragment sama seperti di activity, bedanya hanya peletakan method ButterKnife.bind(this).

Selain itu kita juga membutuhkan object Unbinder untuk melepaskan binding butterknife saat tidak dibutuhkan lagi, dalam hal ini kita akan meng-unbind di method onDestroyView(). 
 
public class TestFragment extends Fragment {

    Unbinder unbinder;

    @BindView(R.id.tv_name)
    TextView tvName;
    @BindView(R.id.edt_inputName)
    EditText edtInputName;
    @BindView(R.id.btn_simpan)
    Button btSimpan;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.test_layout, container, false);

        // bind butterknife disini
        unbinder = ButterKnife.bind(this, view);

        return view;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        // unbind butterknife saat viewfragment tidak digunakan lagi
        unbinder.unbind();
    }
}

Penggunaan di ViewHolder

Kita juga bisa menggunakannya di list adapter :

public class MyAdapter extends BaseAdapter {
  @Override public View getView(int position, View view, ViewGroup parent) {
    .........
    // any code
  }

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

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

Macam - macam Listener Binding

Untuk binding listener, kita bisa menggunakan beberapa tipe parameter :

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

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

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

Penggunaan Annotation lainnya 

Selain bindview dan bindevent, juga bisa untuk bind string, drawable, color dan lain-lain.
public class TestMain extends AppCompatActivity {

    // -- gloabl variabel lainnya

    @BindDrawable(R.drawable.ic_launcher_background)
    Drawable launcher;

    @BindString(R.string.input_nama)
    String inputNama;

    @BindColor(R.color.janda_muda)
    int jandaMuda;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // pertama bind dulu butterknife di dalam method onCreate()
        ButterKnife.bind(this);

        // testing bind text dan color
        tvName.setText(inputNama);
        tvName.setTextColor(jandaMuda);
    }

   // --------------- any method
}
  Itulah beberapa annotation dan fungsi-fungsi nya dalam mempermudah kita dalam membinding view. Jika ada tambahan , pertanyaan atau lainnya, silahkan diskusi di kolom komentar..

Happy Coding. 

 

No comments:

Post a Comment