Wenn Sie ein Handle für ein Spinner- Objekt in einer Android-Aktivität haben, können Sie die Spinner-Optionen programmgesteuert öffnen und den Benutzer dazu zwingen, eine Option auszuwählen, obwohl er nicht auf sich Spinnerselbst geklickt hat?
Wenn Sie ein Handle für ein Spinner- Objekt in einer Android-Aktivität haben, können Sie die Spinner-Optionen programmgesteuert öffnen und den Benutzer dazu zwingen, eine Option auszuwählen, obwohl er nicht auf sich Spinnerselbst geklickt hat?
Antworten:
Um den Spinner zu öffnen, müssen Sie nur die performClick () -Methode aufrufen .
Beachten Sie, dass Sie diese Methode nur über den UI-Thread aufrufen dürfen. Wenn Sie den Spinner von einem separaten Thread aus öffnen müssen, sollten Sie einen Handler im UI-Thread erstellen und dann von Ihrem zweiten Thread aus ein ausführbares Objekt senden, das performClick () an den Handler aufruft.
package com.example.SpinnerDemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.os.Handler;
public class SpinnerDemo extends Activity {
private Handler h;
private Spinner s;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
h = new Handler();
s = (Spinner) findViewById(R.id.spinner);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.array.planets, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(adapter);
// Open the Spinner...
s.performClick();
// Spawn a thread that triggers the Spinner to open after 5 seconds...
new Thread(new Runnable() {
public void run() {
// DO NOT ATTEMPT TO DIRECTLY UPDATE THE UI HERE, IT WON'T WORK!
// YOU MUST POST THE WORK TO THE UI THREAD'S HANDLER
h.postDelayed(new Runnable() {
public void run() {
// Open the Spinner...
s.performClick();
}
}, 5000);
}
}).start();
}
}
Die in diesem Beispiel verwendeten Ressourcen finden Sie hier .
Sie müssen nicht zwei ausführbare Dateien verwenden, wie im vorherigen Beispiel gezeigt.
Das wird reichen:
h.postDelayed(new Runnable() {
public void run() {
s.performClick();
}
}, 5000);
Verwenden Sie dies einfach
yourspinner.performClick();