Spinner的setOnItemSelectedListener方法没有被调用

10

我使用setOnItemSelectedListener来指定在下拉列表(spinner)中选择哪个项目,但我认为它没有被调用。当程序运行时,它应该打印出"It works"。

XML 代码:

<Spinner
    android:id="@+id/quantity"
    android:layout_width="94dp"
    android:layout_height="27dp"
    android:layout_x="11dp"
    android:layout_y="118dp"
     />

Java 代码:

public class quantity extends Activity
{

Spinner  quantity;


    public void onCreate(Bundle savedInstanceState) 
    {
    quantity=(Spinner)findViewById(R.id.quantity);

    quantity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
            {
                public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) 
                {
                    Object item = parent.getItemAtPosition(pos);

                    System.out.println("it works...   ");

                }

                public void onNothingSelected(AdapterView<?> parent) 
                {

                }
            });


    }

}

2
你在执行findViewById之前调用了setContentView(R.layout.<yourXmlFile>)吗? - chopchop
正如@chopchop所建议的那样,您可能会遇到nullpointerexception。您尚未将布局的内容设置为活动。 - Raghunandan
是的,我做了,但为了让代码更短,我在这里省略了它。 - Jeff
是的,你有设置Spinner的适配器吗? - Muhammad Babar
@Muhammad Babar 对不起,你是对的,我错误地没有向下拉菜单添加数据。感谢你的解决方案。 - Jeff
显示剩余9条评论
2个回答

26

试一试

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.Your_Layout);

        //to fill your Spinner
        List<String> spinnerArray = new ArrayList<String>();
        spinnerArray.add("Item 1");
        spinnerArray.add("Item 2");
        spinnerArray.add("Item 3");
        spinnerArray.add("Item 4");
        spinnerArray.add("Item 5");

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, spinnerArray);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        Spinner spinner = (Spinner) findViewById(R.id.quantity);
        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view,
                    int position, long id) {
                Object item = adapterView.getItemAtPosition(position);
                if (item != null) {
                    Toast.makeText(MainActivity.this, item.toString(),
                            Toast.LENGTH_SHORT).show();
                }
                Toast.makeText(MainActivity.this, "Selected",
                        Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
                // TODO Auto-generated method stub

            }
        });
    }

4
如果你已经解决了这个问题,与其让其他人浪费时间为你解决这个问题,不如与大家分享答案,这样会更好。请问您需要我的翻译吗? - CoderOfTheNight
setOnItemSelectedListener在onCreate方法中对我有效。它在UI线程之外无法工作。 - chobela

-2

你忘记了setContentView(R.layout.yourlayout);


1
你应该将那个作为注释而不是答案添加。 - Caio Mar

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