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 值,这就是为什么它看起来微调器根本没有改变......

嗯...我觉得挺傻的...