无法解析方法 'setAdapter()'

Cannot resolve method 'setAdapter()'

我发现了几个与此类似的问题,但其中 none 解决了我的问题。这是我写的代码 -

DataBaseHelper dataBaseHelper;
ArrayAdapter<String> mAdapter;
ListView notesList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    dataBaseHelper = new DataBaseHelper (this);
    notesList = (ListView) findViewById(R.id.notesList);
    loadNotesList ();
}

public void loadNotesList () {
    ArrayList<String> notesList = dataBaseHelper.getNameList();
    if (mAdapter == null) {
        mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.note_name, notesList);
        notesList.setAdapter(mAdapter);
    }

    else {
        mAdapter.clear();
        mAdapter.addAll(notesList);
        mAdapter.notifyDataSetChanged();
    }
}

...

我的代码看起来就像我正在遵循的教程中的代码一样,我的代码看起来就像它在正确的位置,但我知道我遗漏了什么或做错了什么,因为 Android Studio 给了我这个错误-

Cannot resolve method 'setAdapter(android.widget.ArrayAdapter<java.lang.String>)'

有人看到我做错了什么,或者我可能需要添加或更改什么吗?谢谢!

您正在传递 ListView 作为

的最后一个参数
mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.note_name, notesList);

无效。

notesList是一个字符串的ArrayList和一个ListView,需要改名字。

您在 loadNotesList 函数中引入了局部变量 notesList:

ArrayList<String> notesList = dataBaseHelper.getNameList();

将此名称更改为其他名称。

您已经为 ListView

声明了一个 member 变量 notesList
ListView notesList = (ListView) findViewById(R.id.notesList);

另一个是 stringArrayList,它是方法 loadNotesList()

local 变量
ArrayList<String> notesList = dataBaseHelper.getNameList();

解决方案:

您可以使用 this 运算符或为 2 个变量使用不同的名称。

试试这个:

DataBaseHelper dataBaseHelper;
ArrayAdapter<String> mAdapter;
ArrayList<String> notesList

ListView mListView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    dataBaseHelper = new DataBaseHelper (this);
    mListView = (ListView) findViewById(R.id.notesList);
    loadNotesList ();
}

public void loadNotesList () {
    notesList = dataBaseHelper.getNameList();

    if (mAdapter == null) {
        mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.note_name, notesList);
        mListView.setAdapter(mAdapter);
    }

    else {
        mAdapter.clear();
        mAdapter.addAll(notesList);
        mAdapter.notifyDataSetChanged();
    }
}

...

您已在方法(成员变量)外声明了 ListView notesList;,并且 ArrayList<String> notesListloadNotesList()(语言环境变量)内。

因此,当您尝试在方法内部访问 notesList 时,Locale 变量将调用 (Scope of variables).

作为解决方案,您可以添加 this.notesListthis 关键字来引用 class 中的 instance/member 变量),如下所示:

mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.note_name, this.notesList);//will call member variable

但是,为了简单起见,您可以重命名 notesList 变量名称之一(由您决定)。