Android 依赖微调器 - onItemSelected 不触发
Android dependent spinners - onItemSelected does not fire
我尝试创建两个依赖微调器。我知道这类问题已经够多了,但没有解决我的问题。似乎 onItemSelected
根本没有触发。当第一个微调器 (divisions_spinner) 被 select 编辑或更改时,我希望第二个 (townships_spinner) 发生变化。假设我有州和城市,当我 select 州 a 只想显示给定州的城市时。微调器是动态创建的。
这是我的代码:
public class RegistrationActivity extends Activity implements AdapterView.OnItemSelectedListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
createLayout();
}
public void createLayout(){
division_spinner = new Spinner(this);
ArrayAdapter division_adapter = new ArrayAdapter(this,R.layout.spinner,divisions.getList());
divisions_id = viewer.getValueByKey(viewer_form.getViewers_form_viewers_inputname());
division_spinner.setAdapter(division_adapter);
division_spinner.setSelection(divisions.getIndex(divisions_id));
division_spinner.setOnItemSelectedListener(this);
township_spinner = new Spinner(this);
ArrayAdapter township_adapter = new ArrayAdapter(this,R.layout.spinner,townships_map.get(divisions_id));
if (divisions_id == null) {
township_spinner.setEnabled(false);
}
String value = viewer.getValueByKey(viewer_form.getViewers_form_viewers_inputname());
township_spinner.setSelection(townships.getIndex(value, divisions_id));
}
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
Toast.makeText(RegistrationActivity.this, "Yes",Toast.LENGTH_LONG);
if(arg0.equals(division_spinner)) {
Toast.makeText(RegistrationActivity.this, "Yes - You got it!",Toast.LENGTH_LONG);
township_spinner.setEnabled(true);
ArrayAdapter township_adapter = new ArrayAdapter(this, R.layout.spinner, townships_map.get(((Division)division_spinner.getSelectedItem()).getDivisions_id().toString()));
township_spinner.setAdapter(township_adapter);
}
}
public void onNothingSelected(AdapterView<?> arg0) {
}
}
但是"Yes"连"Yes - you got it!"吐司都没有出现
我想我错过了一些愚蠢的东西,但我找不到它。
您正在实施 AdapterView.onItemSelected。
...试试这个吧
Spinner.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id)
{
Toast.makeText(topThis, "selected", Toast.LENGTH_LONG).show();
//Call other spinner here to update.
}
@Override
public void onNothingSelected(AdapterView<?> parentView)
{
Toast.makeText(topThis, "nothing selected", Toast.LENGTH_LONG).show();
}
});
编辑:正如普拉萨德所说。如果你没有 setContentView(View);你的 activity 不会有一个 xml 来膨胀,所以你的观点永远不会被创造成任何东西。
我犯了一系列错误,导致它没有像我预期的那样工作。
首先: 我忘记在 Toast.makeText()
上打电话给 **show()**
其次:我在创建ArrayList
时犯了一个大错。我用数据填充 ArrayList
,然后将列表放入 HashMap
,然后调用 ArrayList.**clear()**
。这导致覆盖了 HashMap 值,这就是为什么它看起来微调器根本没有改变......
嗯...我觉得挺傻的...
我尝试创建两个依赖微调器。我知道这类问题已经够多了,但没有解决我的问题。似乎 onItemSelected
根本没有触发。当第一个微调器 (divisions_spinner) 被 select 编辑或更改时,我希望第二个 (townships_spinner) 发生变化。假设我有州和城市,当我 select 州 a 只想显示给定州的城市时。微调器是动态创建的。
这是我的代码:
public class RegistrationActivity extends Activity implements AdapterView.OnItemSelectedListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
createLayout();
}
public void createLayout(){
division_spinner = new Spinner(this);
ArrayAdapter division_adapter = new ArrayAdapter(this,R.layout.spinner,divisions.getList());
divisions_id = viewer.getValueByKey(viewer_form.getViewers_form_viewers_inputname());
division_spinner.setAdapter(division_adapter);
division_spinner.setSelection(divisions.getIndex(divisions_id));
division_spinner.setOnItemSelectedListener(this);
township_spinner = new Spinner(this);
ArrayAdapter township_adapter = new ArrayAdapter(this,R.layout.spinner,townships_map.get(divisions_id));
if (divisions_id == null) {
township_spinner.setEnabled(false);
}
String value = viewer.getValueByKey(viewer_form.getViewers_form_viewers_inputname());
township_spinner.setSelection(townships.getIndex(value, divisions_id));
}
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
Toast.makeText(RegistrationActivity.this, "Yes",Toast.LENGTH_LONG);
if(arg0.equals(division_spinner)) {
Toast.makeText(RegistrationActivity.this, "Yes - You got it!",Toast.LENGTH_LONG);
township_spinner.setEnabled(true);
ArrayAdapter township_adapter = new ArrayAdapter(this, R.layout.spinner, townships_map.get(((Division)division_spinner.getSelectedItem()).getDivisions_id().toString()));
township_spinner.setAdapter(township_adapter);
}
}
public void onNothingSelected(AdapterView<?> arg0) {
}
}
但是"Yes"连"Yes - you got it!"吐司都没有出现
我想我错过了一些愚蠢的东西,但我找不到它。
您正在实施 AdapterView.onItemSelected。
...试试这个吧
Spinner.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id)
{
Toast.makeText(topThis, "selected", Toast.LENGTH_LONG).show();
//Call other spinner here to update.
}
@Override
public void onNothingSelected(AdapterView<?> parentView)
{
Toast.makeText(topThis, "nothing selected", Toast.LENGTH_LONG).show();
}
});
编辑:正如普拉萨德所说。如果你没有 setContentView(View);你的 activity 不会有一个 xml 来膨胀,所以你的观点永远不会被创造成任何东西。
我犯了一系列错误,导致它没有像我预期的那样工作。
首先: 我忘记在 Toast.makeText()
**show()**
其次:我在创建ArrayList
时犯了一个大错。我用数据填充 ArrayList
,然后将列表放入 HashMap
,然后调用 ArrayList.**clear()**
。这导致覆盖了 HashMap 值,这就是为什么它看起来微调器根本没有改变......
嗯...我觉得挺傻的...