2017-07-25 1 views
0

J'ai trouvé plusieurs questions similaires à celle-ci, mais aucune ne résout mon problème. Voici le code que je l'ai écrit -Impossible de résoudre la méthode '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(); 
    } 
} 

... 

Mon code semble tout comme le code dans le tutoriel que je suivais, et mon code semble comme il est au bon endroit, mais je sais que je me manque quelque chose ou fait quelque chose de mal, car Android studio me donne ce eRROR-

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

Est-ce que tout le monde voir ce que je fait de mal, ou ce que je pourrais avoir besoin d'ajouter ou de changer? Je vous remercie!

+0

Eh bien, un 'ArrayList' n'a pas de méthode' setAdapter (String) 'et' notesList' est un 'ArrayList' ... –

Répondre

1

Vous avez introduit la variable notesList locale à l'intérieur loadNotesList fonction:

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

changer ce nom à autre chose.

+0

Cela a répondu à ma question * exactement *. J'ai juste eu des variables contradictoires, et c'est tout. Merci, mon homme. –

+0

@GeorgeB Content de vous aider. – andrei

1

Vous passez un ListView comme le dernier paramètre de

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

Ce n'est pas valide.

+0

Oui. C'est parce que j'ai des variables en conflit 'ListView notesList' et' ArrayList notesList = dataBaseHelper.getNameList() '. Je viens de changer l'une des variables, et cela fonctionne maintenant. –

+0

De rien. Acceptez simplement la réponse, afin que les autres développeurs puissent bénéficier de votre question. –

+0

@GeorgeB Ce n'est pas vrai. Il passe ArrayList comme dernier paramètre, pas ListView. Regardez attentivement, il introduit des notes variables localesList. – andrei

1

notesList est une ArrayList de chaînes et un ListView, vous devrez changer le nom.

0

Vous avez déclaré member variables notesList pour ListView

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

et un autre sur est ArrayList de string qui est une variable local de la méthode loadNotesList()

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

SOLUTION:

Vous pouvez utiliser l'opérateurou utiliser un nom différent pour 2 variables.

Essayez ceci:

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

Merci de me l'avoir fait savoir. C'était une erreur. :) – FAT

0

Votre ont déclaré ListView notesList; en dehors de la méthode (variable membre) et le ArrayList<String> notesList est à l'intérieur de la loadNotesList() (Variable locale). Par conséquent, lorsque vous essayez d'accéder à notesList à l'intérieur de la méthode, la variable Locale appelle (Scope of variables).

Comme solution, vous pouvez ajouter this.notesList (this mot-clé pour faire référence à une variable instance/membre de la classe), comme ci-dessous:

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

cependant, de garder la simplicité, vous pouvez renommer l'une des variables notesList nom (à vous).