2016-04-07 4 views
1

ich einen Cursor-Adapter haben eine Listenansicht auf der Basis der Abfragen zu füllen, möchte ich das Layout der Listenansicht steuern, indem eine Variable in dem Adapter geben ich die folgendeeine Variable in BindViews eines Cursors Adapter in Android Passing

public class QueryCursorAdapter extends CursorAdapter{ 
View retView; 
private DBHelper mHelper; 
public QueryCursorAdapter(Context context, Cursor c,int QCase) { 
    super(context, c, QCase); 
} 

Shouldnt setzen die Variable in als auch in der BindViews wie

public void bindView(View view, Context context, Cursor cursor,int qcase) 

Warum es sagt, ich Klasse als abstrakt deklarieren müssen?

Gibt es eine andere Möglichkeit, das Layout basierend auf dem Typ meiner Abfragen in SQLite zu steuern?

Antwort

2

Schauen Sie sich bindView Methode - es kann nur 3 definierte Parameter.

Wenn Sie Ihre Klasse extends CursorAdapter sagen, sollten Sie diese Methode implementieren, wie es als abstract in CursorAdapter deklariert wird.

Also, sollten Sie nur diese 3 Parameter in Ihre Implementierung von bindView setzen. Wenn Sie den 4. Parameter setzen, denken Sie daran, dass es sich nicht um die Implementierung der Basismethode handelt, sondern um Ihre eigene Methode.
Deshalb erhalten Sie eine Nachricht über die Deklaration der Klasse abstract, weil Sie die abstrakte Basismethode nicht implementiert haben.

Sie können den benötigten Parameter an den Konstruktor übergeben (wie Sie es jetzt tun) und ihn im entsprechenden Feld Ihrer Klasse speichern.

Dann, in bindView Methode können Sie einfach dieses Feld verwenden, wie Sie brauchen.

Upd. Darüber hinaus können Sie so viele Parameter verwenden, wie Sie benötigen - erstellen Sie einfach Ihren eigenen Konstruktor, z. B. CursorAdapter(Context context, Cursor c, param1, param2 ... paramN), und vergessen Sie nicht darin, den Basiskonstruktor CursorAdapter(Context context, Cursor c) aufzurufen. Speichern Sie Ihre Parameter in Klassenfeldern und verwenden Sie sie dann in bindView und anderen Methoden, wie Sie benötigen.

Upd2. Code-Beispiel:

public class QueryCursorAdapter extends CursorAdapter{ 
View retView; 
private int myParam1, myParam2, myParam3; 
private DBHelper mHelper; 

public QueryCursorAdapter(Context context, Cursor c, int param1, int param2, int param3) { 
    super(context, c); 
    myParam1 = param1; 
    myParam2 = param2; 
    myParam3 = param3; 
} 

Dann können Sie diese myParam1-2-3 überall in Ihrem Adapter.

+0

Wie kann ich es im entsprechenden Feld meiner Klasse irgendein Beispiel speichern? –

+1

Pls. siehe bearbeitete Antwort –

+0

Also so muss ich nicht Parameter in bindview setzen, weil es bereits innerhalb korrekt übergeben wurde? Danke! –