android - Spinner setOnItemClickListener 不接受实现 OnItemClickListener 作为参数的命名类
Posted
技术标签:
【中文标题】android - Spinner setOnItemClickListener 不接受实现 OnItemClickListener 作为参数的命名类【英文标题】:android - Spinner setOnItemClickListener doesn't accept named class that implement OnItemClickListener as parameter 【发布时间】:2018-02-08 06:17:49 【问题描述】:在我的 android 应用程序中,我有一个 Spinner,我尝试检测何时选择了一个项目。我知道这可以使用setOnItemSelectedListener()
方法来完成,但我不明白这可以正常工作:
((Spinner)findViewById(R.Id.mySpinner)).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
// implement onItemClick here
);
虽然这会给出参数“不适用于” Spinner 的错误:
((Spinner)findViewById(R.Id.mySpinner)).setOnItemSelectedListener(new MyOnItemSelectedListener());
MyOnItemSelectedListener 在哪里,它是我的 MainActivity 中的一个嵌套类:
private class MyOnItemSelectedListener implements AdapterView.OnItemSelectedListener
public MyOnItemSelectedListener()
// implement onItemClick here
我想要实现的不仅仅是有效的代码——我已经有了。它是易于阅读的代码(使用我的代码中事物的真实名称和我的 MainActivity 类的结构,使用嵌套类比使用匿名类更具可读性)。
我如何理解java,这两者本质上应该是相同的,只是一个类有名字,另一个没有。
【问题讨论】:
【参考方案1】:在您的代码中,您使用了Id
(R.Id.mySpinner
) 而不是id
(R.id.mySpinner
)。
您的代码中的这两种实现肯定会起作用。
初始化微调器:
Spinner spinner = new Spinner(getActivity());
spinner.setOnItemSelectedListener(new MySpinner());
内部类:
private class MySpinner implements AdapterView.OnItemSelectedListener
public MySpinner()
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
@Override
public void onNothingSelected(AdapterView<?> parent)
这对我来说实际上工作得很好。请与您的id
和layout
联系。
【讨论】:
谢谢,它成功了。我不知道为什么上次尝试时没有,但现在可以了。也许我在某个地方输入了错误的类型。以上是关于android - Spinner setOnItemClickListener 不接受实现 OnItemClickListener 作为参数的命名类的主要内容,如果未能解决你的问题,请参考以下文章