多个微调器和onItemSelected

时间:2011-02-25 15:38:52

标签: android events spinner

我有两个触发onItemSelected事件的微调器。问题是我怎么知道哪一个触发了这样的事件?到目前为止我试过了:

 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
{

    Log.d("form","onitemselected");
    switch (view.getId()) {
    case R.id.region_spinner:
        Region r = (Region)sregions.getSelectedItem();
        Log.d("form","regionid:" + r.id);
        break;
    case R.id.state_spinner:
        Log.d("form","state id:");
        break;
    }

但只显示第一个日志,因此交换机中没有匹配项。

4 个答案:

答案 0 :(得分:79)

使用:

switch(parent.getId()) {
    ...
}
而你正是需要的。 参数中的view是实际的'row'(即spinner项的被点击的子项),而parent是你所追求的实际'spinner'。

答案 1 :(得分:3)

Spinner是AdapterView的子类。传递给方法的父对象是选择项目的微调器。

答案 2 :(得分:0)

如果一个活动中有多个微调器并且使用onItemSelected覆盖方法,请使用以下代码

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
 if (parent!!.id == R.id.spinner_1) {
    // first spinner selected
 } else if (parent!!.id == R.id.spinner_2) {
    // second spinner selected
 }

}

您可以使用开关盒

答案 3 :(得分:0)

如果您在Kotlin上导入XML,则可以按以下方式使用它:

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: 
Long) {
when (parent)
    firstSpinner -> {
        // first spinner selection
        }
    secondSpinner -> {
        // second spinner selected
        }
    }
}