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) 

    

这对我来说实际上工作得很好。请与您的idlayout 联系。

【讨论】:

谢谢,它成功了。我不知道为什么上次尝试时没有,但现在可以了。也许我在某个地方输入了错误的类型。

以上是关于android - Spinner setOnItemClickListener 不接受实现 OnItemClickListener 作为参数的命名类的主要内容,如果未能解决你的问题,请参考以下文章

Android控件之Spinner简单使用

如何在 Android 中自定义 Spinner

Android/Spinner:删除箭头右侧的填充

android开发--Spinner

android开发--Spinner

android spinner怎么用