无法解析方法'setAdapter()'

问题描述:

我发现了几个类似这个问题,但没有一个解决了我的问题。这是我写的代码 -无法解析方法'setAdapter()'

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的工作室给了我这个错误 -

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

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

+0

那么,'ArrayList'没有'setAdapter(String)'方法,'notesList'是'ArrayList' ... –

你介绍了局部变量notesListloadNotesList功能:

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

更改此名称到别的东西。

+0

这完全回答了我的问题*。我只是有冲突的变数,就这些。谢谢你,我的男人。 –

+0

@GeorgeB很高兴为您效劳。 – andrei

你传递一个ListView作为

mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.note_name, notesList); 

最后一个参数这不是有效的。

+0

是的。这是因为我有冲突的变量'ListView notesList'和'ArrayList notesList = dataBaseHelper.getNameList()'。我只是改变了其中一个变量,现在它已经可以工作了。 –

+0

非常欢迎。只要接受答案,其他开发人员就可以从您的问题中受益。 –

+0

@GeorgeB这不是真的。他传递ArrayList 作为最后一个参数,而不是ListView。仔细看,他介绍了局部变量notesList。 – andrei

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

您已经声明了一个member变量notesListListView

ListView notesList = (ListView) findViewById(R.id.notesList); 

,另一对是stringArrayList这是方法loadNotesList()

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

解决方案的local变量:

您可以使用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(); 
    } 
} 

... 
+1

谢谢你让我知道。这是一个错误。 :) – FAT

你已宣布ListView notesList;方法(成员变量)外侧和ArrayList<String> notesListloadNotesList()(区域设置变量)的内部。

所以当你试图访问notesList里面的方法时,Locale变量会调用(Scope of variables)。

作为一种解决方案可以添加this.notesListthis关键字来引用实例/成员变量在类),如以下:

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

然而,为了保持简单起见,可以重命名notesList变量之一名称(由你决定)。