【问题标题】:android - Spinner setOnItemClickListener doesn't accept named class that implement OnItemClickListener as parameterandroid - Spinner setOnItemClickListener 不接受实现 OnItemClickListener 作为参数的命名类
【发布时间】: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,这两者本质上应该是相同的,只是一个类有名字,另一个没有。

【问题讨论】:

    标签: java android spinner onitemselectedlistener


    【解决方案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 联系。

    【讨论】:

    • 谢谢,它成功了。我不知道为什么上次尝试时没有,但现在可以了。也许我在某个地方输入了错误的类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2012-06-24
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多