これは私が以前にやったことですが、なぜそれが現在機能していないのか理解できないため、私を夢中にさせています...
メニューボタンがあり、通常の方法でmenu.xml
ファイルと、スピナーを作成して表示するスイッチを含むonOptionsItemSelected
メソッド。
setOnItemSelectedListener
を追加しましたが、トリガーされないようです。スピナーが表示されます。オプションを選択するか、バックアウトします。onItemSelected
もonNothingSelected
も呼び出されません。
これは、メニューボタン処理switchステートメントの「case」と「return true」の間のすべてのコードです。 (topThis
はアクティビティのコンテキストを参照する変数です-アプリ内の他のすべてのトーストに対して正常に動作します)
String[] widgetModes = {"Mode 1", "Mode2"};
ArrayAdapter<String> widgetModeAdapter = new ArrayAdapter<String> (this, Android.R.layout.simple_spinner_item, widgetModes);
widgetModeAdapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
Spinner widgetModeSpinner = new Spinner(this);
widgetModeSpinner.setAdapter(widgetModeAdapter);
widgetModeSpinner.setPrompt("Choose Widget Mode");
widgetModeSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id)
{
Toast.makeText(topThis, "derp", Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parentView)
{
Toast.makeText(topThis, "herf", Toast.LENGTH_LONG).show();
}
});
widgetModeSpinner.performClick();
何か案は?私はSpinner
をプログラムで作成しているという事実が問題だと漠然と疑っています...
スピナーを実装していたときに同様の問題が発生しました。親ビューを取得し、Adapter-
spinner1 =(Spinner)findViewById(R.id.spinner1);
spinner1.setAdapter(BindSpinner("ProgramMaster",cols,null,true,""));
spinner1.setOnItemSelectedListener(new OnItemSelectedListener()
{
protected Adapter initializedAdapter=null;
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id)
{
if(initializedAdapter !=parentView.getAdapter() ) {
initializedAdapter = parentView.getAdapter();
return;
}
String selected = parentView.getItemAtPosition(position).toString();
if(abc.equals("Select") && !selected.equals("Select"))
{
do something
}
else
{
Do something
}
textQualification=selected;
SearchUpdated("Qualification");
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
同じスピナーアイテムを再選択することはできません。スピナーの選択を処理するカスタムコードを追加しない場合は、常に最初のアイテムが選択済みとして設定されます。
Toastが表示されないため、次のようなリスナーインターフェイス内でToastを作成するときは、常にコンテキストとして「MyActivity.this」を使用することをお勧めします。
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
/**
* Called when a new item is selected (in the Spinner)
*/
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
// An spinnerItem was selected. You can retrieve the selected item using
// parent.getItemAtPosition(pos)
Toast.makeText(MyActivity.this, "Hello Toast",Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> parent) {
// Do nothing, just another required interface callback
}
}); // (optional)
そして、最後の。show()は時々忘れがちです;)
実際、スピナーの可視性がgoneに設定されている場合、performclick()メソッドを呼び出すとクリックがトリガーされますが、setOnItemSelectedListenerはトリガーされませんしたがって、可視性を変更する必要があります
質問は少し古いことはわかっていますが、AsyncTaskコールバックを待っている場合は、コールバックスレッドでnotifyDataSetChanged()を呼び出して、アダプターにデータの変更を知らせてください。
@Override
public void onPostExecute(String result) {
///do something with your data
spinnerArrayAdapter.notifyDataSetChanged();
}