无法解析方法 '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);
另一个是 string
的 ArrayList
,它是方法 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> notesList
在 loadNotesList()
(语言环境变量)内。
因此,当您尝试在方法内部访问 notesList
时,Locale 变量将调用 (Scope of variables).
作为解决方案,您可以添加 this.notesList
(this
关键字来引用 class 中的 instance/member 变量),如下所示:
mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.note_name, this.notesList);//will call member variable
但是,为了简单起见,您可以重命名 notesList
变量名称之一(由您决定)。
我发现了几个与此类似的问题,但其中 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);
另一个是 string
的 ArrayList
,它是方法 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> notesList
在 loadNotesList()
(语言环境变量)内。
因此,当您尝试在方法内部访问 notesList
时,Locale 变量将调用 (Scope of variables).
作为解决方案,您可以添加 this.notesList
(this
关键字来引用 class 中的 instance/member 变量),如下所示:
mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.note_name, this.notesList);//will call member variable
但是,为了简单起见,您可以重命名 notesList
变量名称之一(由您决定)。