我发现了几个与此类似的问题,但没有一个问题可以解决我的问题。这是我写的代码 -
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>)'
有人看到我做错了什么,或者我可能需要添加或更改的内容?谢谢!
答案 0 :(得分:1)
您正在传递ListView
作为
mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.note_name, notesList);
那是无效的。
答案 1 :(得分:1)
notesList
是一个字符串ArrayList和一个ListView,你需要更改名称。
答案 2 :(得分:1)
您已在notesList
函数中引入了局部变量loadNotesList
:
ArrayList<String> notesList = dataBaseHelper.getNameList();
将此名称更改为其他名称。
答案 3 :(得分:0)
您已为member
notesList
变量ListView
ListView notesList = (ListView) findViewById(R.id.notesList);
另一个是ArrayList
string
local
,它是方法loadNotesList()
的{{1}}变量
ArrayList<String> notesList = dataBaseHelper.getNameList();
<强> SOLUTION:强>
您可以使用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();
}
}
...
答案 4 :(得分:0)
您已在方法(成员变量)之外声明ListView notesList;
,而ArrayList<String> notesList
位于loadNotesList()
(区域设置变量)内。
因此,当您尝试在方法中访问notesList
时,Locale变量将调用(Scope of variables)。
作为一种解决方案,您可以添加this.notesList
(this
关键字来引用类中的实例/成员变量),如下所示:
mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.note_name, this.notesList);//will call member variable
但是,为了保持简洁,您可以重命名notesList
变量名之一(由您决定)。