android - Spinner setOnItemClickListener 不接受将 OnItemClickListener 实现为参数的命名 class

android - Spinner setOnItemClickListener doesn't accept named class that implement OnItemClickListener as parameter

在我的 android 应用程序中,我有一个 Spinner,我会尝试检测何时选择了一个项目。我知道这可以使用 setOnItemSelectedListener() 方法来完成,但我不明白的是这可以正常工作:

((Spinner)findViewById(R.Id.mySpinner)).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
    {
        // implement onItemClick here
    });

虽然这会给 Spinner 一个参数是 "not applicable" 的错误:

((Spinner)findViewById(R.Id.mySpinner)).setOnItemSelectedListener(new MyOnItemSelectedListener());

MyOnItemSelectedListener 是这个,它是我的 MainActivity 中的嵌套 class:

private class MyOnItemSelectedListener implements AdapterView.OnItemSelectedListener
{
    public MyOnItemSelectedListener() {}

    // implement onItemClick here
}

我想要实现的不仅仅是有效的代码 - 我已经有了。它是易于阅读的代码(使用我代码中事物的真实名称和我的 MainActivity class 的结构,使用嵌套 class 比使用匿名代码更具可读性)。

我怎么理解java,这两个本质上应该是一样的,只是一个class有名字,另一个没有。

在您的代码中,您使用了 Id (R.Id.mySpinner) 而不是 id (R.id.mySpinner)。

您的代码中的两种实现都肯定有效。

初始化微调器:

Spinner spinner = new Spinner(getActivity());
spinner.setOnItemSelectedListener(new MySpinner());

内Class:

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 .