【问题标题】:setOnItemSelectedListener of Spinner does not callSpinner 的 setOnItemSelectedListener 不调用
【发布时间】:2023-03-23 15:30:02
【问题描述】:

我使用 setOnItemSelectedListener 来指定在微调器中选择了哪个项目,但我认为它没有被调用。它应该在程序运行时打印“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) 
                {

                }
            });


    }

}

【问题讨论】:

  • 在做 findViewById 之前你有没有调用 setContentView(R.layout.)
  • 正如@chopchop 建议的那样,您可能会遇到空指针异常。您尚未将布局的内容设置为活动
  • 是的,我做了,但是为了缩短代码我在这里省略了
  • 假设您有 setContentView(param); 的任何错误或异常;
  • 您是否为您的微调器设置了任何数据(数组),我没有看到任何数据?

标签: android spinner


【解决方案1】:

试试这个

@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

            }
        });
    }

【讨论】:

  • @KamyarParastesh 如果你已经解决了这个问题,你最好把答案分享给大家,以免别人花时间为你解决你已经解决的问题。
  • setOnItemSelectedListener 在 onCreate 方法下为我工作。它在 UI 线程之外不起作用。
【解决方案2】:

你错过了 setContentView(R.layout.yourlayout);

【讨论】:

  • 您应该将其添加为评论而不是答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 2014-09-13
  • 1970-01-01
  • 2011-06-22
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多