无法解决方法' setAdapter()'

时间:2017-07-25 18:40:47

标签: java android arrays listview android-arrayadapter

我发现了几个与此类似的问题,但没有一个问题可以解决我的问题。这是我写的代码 -

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>)'

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

5 个答案:

答案 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.notesListthis关键字来引用类中的实例/成员变量),如下所示:

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

但是,为了保持简洁,您可以重命名notesList变量名之一(由您决定)。