Ho riscontrato un problema con gli eventi di clic sui pulsanti e gli eventi Searchbar non attivati. Quando trascino la barra di ricerca, il cursore cambia visivamente posizione, ma nel mio OnSeekBarChangedListener
non viene emesso alcun evento. Ho anche un ImageButton
che dovrebbe ricevere eventi di clic, ma non spara neanche. Il MyView in basso qui gestisce correttamente gli eventi touch. Contiene uno GLSurfaceView
che posso fare panoramiche e pizzicare con lo zoom. Che cosa potrebbe causare la mancata attivazione degli eventi?Android SeekBarChangeListener e TouchListener Nessun evento
Ecco il mio layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tec_root">
<ImageButton
android:id="@+id/button_star"
android:contentDescription="@string/star_description"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:layout_marginEnd="16dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:src="@drawable/star_empty"
android:background="#00000000"
android:scaleType="fitXY"/>
<LinearLayout
android:id="@+id/view_plot"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_below="@id/button_star"/>
<SeekBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/button_star"
android:layout_toStartOf="@id/button_star"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:progress="50"
android:layout_alignBaseline="@id/button_star"
android:id="@+id/seekbar" />
</RelativeLayout>
e qui ci sono gli ascoltatori:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
starred = prefs.getBoolean("starred", false);
final ImageButton starButton = (ImageButton) findViewById(R.id.button_star);
starButton.setImageDrawable(ContextCompat.getDrawable(this, (starred ? R.drawable.star_filled :
R.drawable.star_empty)));
starButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
starred = !starred;
prefsEditor = prefs.edit();
prefsEditor.putBoolean("starred", starred);
prefsEditor.apply();
starButton.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),
(starred ? R.drawable.star_filled : R.drawable.star_empty)));
}
});
((SeekBar) findViewById(R.id.seekbar)).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.e("TEST", "Seekbar onProgressChanged called");
Toast.makeText(getApplicationContext(), "Seekbar fired", Toast.LENGTH_SHORT).show();
// respond to update
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
MyView myView = new MyView(this, points, false);
((LinearLayout) findViewById(R.id.view_plot)).addView(myView);
}
È possibile ignorare onTouchEvent nella barra di ricerca e pubblicare il registro? Dalla documentazione e dal codice sorgente di SeekBar sembra che le viste a sinistra/destra che sono focalizzabili possano "rubare" gli eventi di tocco, risultando in un reDraw ma non in una notifica di aggiornamento dell'avanzamento. – JohanShogun
Beh, ha iniziato a lavorare fuori dal nulla per qualche motivo. Ho cambiato un po 'la classe, ma non ricordo di aver cambiato nulla riguardo alla logica di quel 'SeekBar'. –
Provare ad avviare la barra di ricerca prima di impostare Listener. –