2017-07-25 5 views
0

Ich habe mehrere ähnliche Fragen gefunden, aber keine von ihnen behebt mein Problem. Hier ist der Code, den ich geschrieben habe -Die Methode 'setAdapter()' kann nicht aufgelöst werden

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(); 
    } 
} 

... 

Mein Code scheint genau wie der Code in dem Tutorial ich wurde nach, und mein Code scheint wie es an der richtigen Stelle ist, aber ich weiß, dass ich etwas oder etwas falsch gemacht bin fehlt, weil Android Studio gibt mir diese fehler-

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

hat jemand sehen, was ich falsch gemacht habe, oder was ich hinzufügen oder ändern müssen? Vielen Dank!

+0

Nun, eine 'ArrayList' hat keine' setAdapter (String) 'Methode und' notesList' ist eine 'ArrayList' ... –

Antwort

1

Sie haben lokale Variable eingeführt notesList innen loadNotesList Funktion:

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

Ändern Sie diesen Namen auf etwas anderes.

+0

Das beantwortete meine Frage * genau *. Ich hatte nur widersprüchliche Variablen, und das ist alles. Danke, mein Mann. –

+0

@GeorgeB Froh, Ihnen zu helfen. – andrei

1

Sie passieren ein ListView als letzte Parameter von

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

, die nicht gültig ist.

+0

Ja. Das liegt daran, dass ich in Konflikt stehende Variablen 'ListView notesList' und' ArrayList notesList = dataBaseHelper.getNameList() 'habe. Ich habe gerade eine der Variablen geändert, und es funktioniert jetzt. –

+0

Sie sind herzlich willkommen. Akzeptiere einfach die Antwort, damit andere Entwickler von deiner Frage profitieren können. –

+0

@GeorgeB Es ist nicht wahr. Er übergibt ArrayList als letzten Parameter, nicht ListView. Schauen Sie genau hin, er führt lokale Variablen NotesList ein. – andrei

1

notesList ist eine ArrayList von Strings und eine ListView, müssen Sie den Namen ändern.

0

Sie haben eine Variable notesListmember erklärt für ListView

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

und eine weitere auf ArrayList von string ist die loadNotesList()

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

SOLUTION eine local Variable Methode ist:

Sie können den Operator this verwenden oder einen anderen Namen für 2 Variablen verwenden.

Versuchen Sie folgendes:

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

Danke, dass Sie mich wissen lassen. Es war ein Fehler. :) – FAT

0

Ihre ListView notesList; außerhalb der Methode (Membervariable) deklariert haben und die ArrayList<String> notesList ist innerhalb des loadNotesList() (locale Variable). Wenn Sie versuchen, innerhalb der Methode auf notesList zuzugreifen, ruft die Variable Locale (Scope of variables) auf.

Als Lösung können Sie this.notesList (this Schlüsselwort instance/Membervariable in der Klasse zu beziehen) hinzufügen, wie unten:,

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

jedoch Einfachheit zu halten, können Sie eine der notesList Variable umbenennen Name (bis zu dir).

Verwandte Themen