Mungkin secara terprogram membuka Spinner di aplikasi Android?
89
Jika Anda memiliki pegangan ke objek Spinner di Aktivitas Android, dapatkah Anda secara terprogram membuka opsi spinner - sehingga memaksa pengguna untuk memilih opsi meskipun mereka tidak mengkliknya Spinnersendiri?
apa yang Anda maksud dengan objek pemintal, dapatkah Anda berbagi tangkapan layar tiruan tentang apa yang ingin Anda lakukan
the100rabh
performClick()mungkin tidak cukup, jika mendapatkan Unable to add windowerror tersebut, lihat apa yang harus dilakukan disini .
Protean
Jawaban:
146
Untuk membuka Spinner, Anda hanya perlu memanggil metode performClick () .
Perlu diingat bahwa Anda hanya dapat memanggil metode ini dari UI thread. Jika Anda perlu membuka Spinner dari utas terpisah, Anda harus membuat Handler di utas UI dan kemudian, dari utas kedua, kirim objek runnable yang memanggil performClick () ke Handler.
package com.example.SpinnerDemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.os.Handler;
publicclassSpinnerDemoextendsActivity{
private Handler h;
private Spinner s;
@OverridepublicvoidonCreate(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(newRunnable() {
publicvoidrun() {
// 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(newRunnable() {
publicvoidrun() {
// Open the Spinner...
s.performClick();
}
}, 5000);
}
}).start();
}
}
Sumber daya yang digunakan oleh contoh ini dapat ditemukan di sini .
Terima kasih. performClick () adalah yang saya cari. Saya seharusnya melihat metode itu pada pemintal tetapi melewatkannya karena kebingungan di pihak saya. Terima kasih banyak!
JohnRock
Bagaimana jika saya menggunakan runOnUIThread untuk menggunakan melakukan klik dari utas yang berbeda.
Relsell
Bekerja sebelum 5.0.2, tampaknya rusak pada 5.0.2 (hanya untuk beberapa perangkat), tetapi bekerja lagi pada 5.1 ...
Benjamin Piette
Saat menggunakan dialog spinner saya terbuka di belakang dialog menggunakan performClick (); Ada solusi untuk ini?
Huzaifa Asif
26
Untuk menampilkan Spinneritem Anda hanya perlu memanggil performClick()metode itu.
performClick()
mungkin tidak cukup, jika mendapatkanUnable to add window
error tersebut, lihat apa yang harus dilakukan disini .Jawaban:
Untuk membuka Spinner, Anda hanya perlu memanggil metode performClick () .
Perlu diingat bahwa Anda hanya dapat memanggil metode ini dari UI thread. Jika Anda perlu membuka Spinner dari utas terpisah, Anda harus membuat Handler di utas UI dan kemudian, dari utas kedua, kirim objek runnable yang memanggil performClick () ke Handler.
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(); } }
Sumber daya yang digunakan oleh contoh ini dapat ditemukan di sini .
sumber
Untuk menampilkan
Spinner
item Anda hanya perlu memanggilperformClick()
metode itu.Spinner spDeviceType = (Spinner) findViewById(R.id.spDeviceType); spDeviceType.performClick();
sumber
Anda tidak perlu menggunakan 2 runnable seperti yang ditunjukkan pada contoh sebelumnya.
Ini sudah cukup:
h.postDelayed(new Runnable() { public void run() { s.performClick(); } }, 5000);
sumber
Cukup gunakan ini
yourspinner.performClick();
sumber