多个旋转器和onItemSelected

43

我有两个下拉框,它们都会触发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;
    }

但只显示了第一个Log,因此在switch中没有匹配项。

5个回答

93

使用:

switch(parent.getId()) {
    ...
}

您需要的是parent而不是view。在参数中,view代表实际的“行”(即Spinner项的已选子项),而parent则代表您需要的实际“Spinner”。


你能否举个例子详细说明一下? - AbdulSaleem
2
不知道是不是因为版本不同,但对我来说是这样的:adapterView.getId()。希望能帮到别人。 - Luud van Keulen

6
如果您在一个活动中有多个旋转器并且正在使用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
         }
    }

你可以使用switch case语句


3

Spinner是AdapterView的一个子类。传递方法中的父对象是选择了项目的Spinner。


1

首先,在onCreate方法中:

Spinner cit_for_bus,  bus_number;
cit_for_bus = (Spinner) findViewById(R.id.cit_for_bus);
bus_number = (Spinner) findViewById(R.id.bus_number);
cit_for_bus.setOnItemSelectedListener(this);
bus_number.setOnItemSelectedListener(this);

不要忘记使用: 你需要将spinner绑定到onItemSelected
cit_for_bus.setOnItemSelectedListener(this);
bus_number.setOnItemSelectedListener(this);

并使用 implement 来为类实现:

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener

在onCreate之外使用以下代码:

@Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        if (adapterView.getId() == R.id.cit_for_bus) {

            Toast.makeText(getApplicationContext(), adapterView.getId() + "/ " + adapterView.getCount() + "/" + adapterView.getSelectedItem(), Toast.LENGTH_LONG).show();

        } else if (adapterView.getId() == R.id.bus_number) {
            Toast.makeText(getApplicationContext(), adapterView.getId() + "/ " + adapterView.getCount() + "/" + adapterView.getSelectedItem(), Toast.LENGTH_LONG).show();

        }
    }

0

如果你在 Kotlin 上导入你的 XML,你可以这样使用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接