私はこれを解決するためにあまりエレガントではない方法をいくつか考えましたが、何かが欠けているに違いないとわかっています。
onItemSelected
ユーザーとのやり取りなしにすぐに起動しますが、これは望ましくない動作です。UI が何かを実行する前にユーザーが何かを選択するまで待機することを望みます。
onResume()
役立つことを期待して、でリスナーを設定してみましたが、役に立ちませんでした。
ユーザーがコントロールに触れる前にこれが起動しないようにするにはどうすればよいですか?
public class CMSHome extends Activity {
private Spinner spinner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Heres my spinner ///////////////////////////////////////////
spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.pm_list, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
};
public void onResume() {
super.onResume();
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
}
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
Intent i = new Intent(CMSHome.this, ListProjects.class);
i.putExtra("bEmpID", parent.getItemAtPosition(pos).toString());
startActivity(i);
Toast.makeText(parent.getContext(), "The pm is " +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
}
ベストアンサー1
Runnables の使用は完全に間違っています。
setSelection(position, false);
初期選択で使用するsetOnItemSelectedListener(listener)
この方法では、アニメーションなしで選択を設定し、選択された項目のリスナーが呼び出されます。ただし、リスナーは null なので、何も実行されません。次に、リスナーが割り当てられます。
したがって、次の順序に正確に従ってください。
Spinner s = (Spinner)Util.findViewById(view, R.id.sound, R.id.spinner);
s.setAdapter(adapter);
s.setSelection(position, false);
s.setOnItemSelectedListener(listener);