2017-07-25 179 views
0

我發現了幾個類似這個問題,但沒有一個解決了我的問題。這是我寫的代碼 -無法解析方法'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' ... –

回答

1

你介紹了局部變量notesListloadNotesList功能:

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

更改此名稱到別的東西。

+0

這完全回答了我的問題*。我只是有衝突的變數,就這些。謝謝你,我的男人。 –

+0

@GeorgeB很高興爲您效勞。 – andrei

1

你傳遞一個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

1

notesList是一個字符串和ListView的ArrayList,您將需要更改名稱。

0

您已經聲明瞭一個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

0

你已宣佈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變量之一名稱(由你決定)。