微调器的 OnItemClickListener

Posted

技术标签:

【中文标题】微调器的 OnItemClickListener【英文标题】:OnItemClickListener of spinner 【发布时间】:2014-03-03 06:33:11 【问题描述】:

我可以通过这种方式在操作栏中获取 Spinner; re/values/languages.xml 中的项目数组

 <string-array name="languages">
    <item>Finnish</item>
    <item>French</item>
    <item>German</item>
    <item>Slovakian</item>
    <item>Polish</item>
</string-array>

在 res/menu/main.xml 中

  <item
    android:id="@+id/menuSort"
    android:actionLayout="@layout/spinner"
    android:showAsAction="ifRoom"
    android:title="@string/choose"/>

在 res/layout/spinner.xml 中

<Spinner
    android:id="@+id/spinner"
    android:layout_
    android:layout_ 
    android:entries="@array/languages"/>

最后是活动类;

 public class Base_Activity extends Activity 

@Override
public boolean onCreateOptionsMenu(Menu menu) 
    getMenuInflater().inflate(R.menu.main, menu);
    final Spinner spinner = new Spinner(this);
    Log.i("DEBUG1", "CHECKPOINT1");
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(spinnerArrayAdapter);
    Log.i("DEBUG2", "CHECKPOINT2");
    spinnerArrayAdapter.setDropDownViewResource(0);
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) 

               String items=spinner.getSelectedItem().toString();
               Log.i("Selected item : ",items);
        

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

        

    );
    return true;

我没有得到的是在微调项目的 ItemSelected 上没有任何反应。正如您从我的 xml 文件中看到的那样,我什至不需要 Adapter 来获取微调器。但是我正在使用适配器来获取 OnItemSelected。请帮我看看这里发生了什么?

【问题讨论】:

【参考方案1】:

试试这个可能对你有帮助

@Override
    public boolean onCreateOptionsMenu(Menu menu) 
        getMenuInflater().inflate(R.menu.main, menu);
        final Spinner spinner = (Spinner) menu.getItem(0).getActionView().findViewById(R.id.spinner);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) 

                String items = spinner.getSelectedItem().toString();
                Log.i("Selected item : ", items);
            

            @Override
            public void onNothingSelected(AdapterView<?> arg0) 

            

        );
        return super.onCreateOptionsMenu(menu);
    

【讨论】:

给出 java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.Spinner 现在微调器中缺少字符串(项目)。 我将您的答案标记为正确,但我进行了一些编辑以达到我的目标。 伟大的参数名称 arg0、arg1、arg2 和 arg3。非常可读!也许您应该将 Android 源代码添加到 eclipse 或开始使用 Android Studio。 我喜欢这个例子。出于某种原因,Android 上的微调器指南并没有强调 spinner.getSelectedItem()。他们建议您使用 arg0.getItemAtPosition(arg2):developer.android.com/guide/topics/ui/controls/spinner.html【参考方案2】:

如果你想要点击事件,你必须添加OnItemClickListener 而不是OnItemSelectedListener

只有在您选择项目或使用轨迹球或上/下箭头浏览视图时,您的方法才有效。如果你想点击,然后添加OnItemClickListener 并覆盖

public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3)

【讨论】:

也试过了,但没有帮助。 :( 现在完成!!检查勾选的答案。感谢您的支持。 带有 OnItemClickListener 的微调器正在返回不能一起使用的运行时异常。看起来你应该使用 onItemSelectedListener。

以上是关于微调器的 OnItemClickListener的主要内容,如果未能解决你的问题,请参考以下文章

在选择项目之前设置微调器的文本

带有日期选择器的 Android 微调器,例如 Google 日历应用

在Android中动态改变微调器的宽度

微调器的 OnItemClickListener

带有加载微调器的 jQuery 验证

为啥我在这里得到微调器的空引用错误? [复制]