Menghubungkan Event ke View

View bisa memicu event bila user berinteraksi dengannya. Misalkan, bila user menyentuh view ‘Button’, kita perlu menghubungkan event tersebut dengan respon yang tepat. Untuk melakukan hal ini, kita perlu menghubungkan event ke view secara eksplisit.

Masih menggunakan contoh pada latihan sebelumnya, pada activity tersebut memiliki dua ‘Button’, jadi akan kita coba menghubungkan kedua ‘Button’ tersebut dengan event ketika di-klik seperti berikut di bawah ini:
package id.co.blogspot.diansano.uiactivity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/*dua tombol dihubungkan ke event yang sama*/
Button btn1 = (Button)findViewById(R.id.btn1);
btn1.setOnClickListener(btnListener);

Button btn2 = (Button)findViewById(R.id.btn2);
btn2.setOnClickListener(btnListener);
}

/*buat class anonymous untuk merespon button/tombol*/
private View.OnClickListener btnListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getBaseContext(), ((Button) view).getText() + " di-klik",
Toast.LENGTH_LONG).show();
}
};

/*
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_CENTER:
Toast.makeText(getBaseContext(),
"Tengah keypad di-klik",
Toast.LENGTH_LONG).show();
break;

case KeyEvent.KEYCODE_DPAD_LEFT:
Toast.makeText(getBaseContext(),
"Panah kiri di-klik",
Toast.LENGTH_LONG).show();
break;

case KeyEvent.KEYCODE_DPAD_RIGHT:
Toast.makeText(getBaseContext(),
"Panah kanan di-klik",
Toast.LENGTH_LONG).show();
break;

case KeyEvent.KEYCODE_DPAD_UP:
Toast.makeText(getBaseContext(),
"Panah atas di-klik",
Toast.LENGTH_LONG).show();
break;

case KeyEvent.KEYCODE_DPAD_DOWN:
Toast.makeText(getBaseContext(),
"Panah bawah di-klik",
Toast.LENGTH_LONG).show();
break;
}
return false;
}*/
}
Bila kita klik tombol ‘OK’ atau tombol ‘Cancel’, akan muncul pesan yang bersesuaian.

Selain dengan cara membuat class anonymus untuk merespon event, kita juga bisa membuat inner class anonymous. Seperti co toh berikut untuk menangani method ‘onFocusChange()’ untuk ‘EditText’:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/*dua tombol dihubungkan ke event yang sama*/
Button btn1 = (Button)findViewById(R.id.btn1);
btn1.setOnClickListener(btnListener);

Button btn2 = (Button)findViewById(R.id.btn2);
btn2.setOnClickListener(btnListener);

/*Buat inner class anonymous untuk membuat/merespon onFocusChange pada EditText*/
EditText txt1 = (EditText)findViewById(R.id.txt1);
txt1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
Toast.makeText(getBaseContext(),
((EditText) view).getId() + " dapat fokus - " +
b, Toast.LENGTH_LONG).show();
}
});
}
Catatan:
Untuk contoh latihan di atas, pastikan bahwa kode pada method ‘onKeyDown()’ (bila aktif/tidak di-komentarkan) menggembalikan nilai ‘false’, dan bukan ‘true’ seperti yang sudah dijelaskan pada latihan sebelumnya.

Dengan menggunakan inner class seperti di atas, klik event untuk dua tombol sebelumnya juga bisa ditulis ulang seperti cara di atas.

No comments: