Saya mengalami masalah dengan Tombol saya tetap dalam keadaan yang disorot, setelah melakukan hal berikut:
public class MainActivity extends AppCompatActivity {
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton button = (AppCompatButton) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Test", "calling onClick");
}
});
button.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
}
case MotionEvent.ACTION_UP: {
v.getBackground().clearColorFilter();
v.invalidate();
v.performClick();
Log.d("Test", "Performing click");
return true;
}
}
return false;
}
});
}
}
Mengenai kode di atas, ketika menggunakannya, saya mengharapkan klik tombol untuk ditangani oleh sentuhan, dan dengan mengembalikan "benar" penanganannya harus berhenti di touchListener.
Tapi ini bukan masalahnya. Tombol tetap dalam kondisi yang disorot, meskipun klik dipanggil.
Apa yang saya dapatkan adalah:
Test - calling onClick
Test - Performing click
di sisi lain, jika saya menggunakan kode berikut, tombol diklik, cetakan yang sama, tetapi tombol tidak berakhir terjebak dalam keadaan yang disorot:
public class MainActivity extends AppCompatActivity {
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton button = (AppCompatButton) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Test", "calling onClick");
}
});
button.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
}
case MotionEvent.ACTION_UP: {
v.getBackground().clearColorFilter();
v.invalidate();
// v.performClick();
Log.d("Test", "Performing click");
return false;
}
}
return false;
}
});
}
}
Saya agak bingung apa rantai responden untuk acara sentuhan. Dugaan saya adalah:
1) TouchListener
2) DaftarKlik
3) ParentViews
Bisakah seseorang mengonfirmasi hal ini juga?