2017-03-21 1 views
0

Ich denke, ich habe zu viel Code in meinem CustomAdapter für meine Listview. Ist es normal, mehrere Onclicks, Db-Editierfunktionen und Popup-Fenster in einem CustomAdapter zu haben?Mache ich zu viel Code in meinen Customadapter für Listview?

Ich habe untersucht, wie man den Code in die Aktivitätsklasse verschiebt, in der sich die Listenansicht befindet, aber das ist entweder unmöglich oder sehr kompliziert. Ich habe nicht wirklich viel Erfahrung, daher ist es schwierig, einigen der technischeren Codierungsmethoden zu folgen.

+0

Schwer zu beantworten, ohne den Code zu sehen ... –

+0

scheint wie nicht so gut geschriebenen Code, aber ohne jede Zeile ... – snachmsm

+0

Es klingt wie Sie eine Menge Geschäftslogik in den Adapter setzen, wenn es nur Funktion ist um Ansichten zurückzugeben, die die Daten darstellen. Meiner Meinung nach, ja, du setzt zu viel ein. Praxis Trennung von Anliegen. – DeeV

Antwort

0

Ich habe sucht, wie Sie den Code in die Aktivitätsklasse zu bewegen, die die Listview beherbergt, aber es ist entweder unmöglich oder sehr kompliziert

Der einzige Grund, warum es schwierig sein würde, ist, dass Sie tun zu viel im Adapter.

Wenn Sie den Code in die Aktivität bewegen wollten, wäre der Weg Schnittstellen seine

Zum Beispiel zu verwenden, mit einer gegebenen Item Klasse, die Sie in den Adapter haben.

// ... BaseAdapter, ArrayAdapter, RecyclerView.Adapter... Same difference 
public class YourAdapter extends BaseAdapter { 

    public interface OnItemActionListener { 
     void onItemEdited(Item x); 
     void onItemAdded(Item x); 
     void onItemClicked(Item x); 
     // etc. 
    } 

    public OnItemActionListener listener; // should make private with a setter method 

    ... 

     // somewhere in the adapter 
     Item x = getItem(position); 

     if (listener != null) { 
      listener.onItemClicked(item); 
     } 

    ... 

} 

Und Ihre Aktivität könnte diese Schnittstelle implementieren.

public YourActivity extends Activity 
    implements YourAdapter.OnItemActionListener { 

    @Override 
    public void onItemClicked(Item x) { 
     Log.d("item click", String.valueOf(x)); 
    } 

    @Override 
    public void onItemAdded(Item x) { 
     Log.d("item added", String.valueOf(x)); 
    } 

    @Override 
    protected void onCreate(Bundle b){ 
     super.onCreate(b); 
     setContentView... ; 

     adapter = new YourAdapter... ; 
     adapter.listener = this; // Should use a setter method instead 
    } 

} 

In Bezug auf dieses

Ist es normal, mehrere onclicks zu haben

Sie benötigen nur eine Schnittstelle für onClick(View v) und Sie können v.getId() gegen jeden R.id Wert überprüfen, um zu sehen, was wird angeklickt.

+0

ist YourActivity: 1.Die Aktivität, die die ListView und den ListView-Adapter enthält oder 2.Eine andere Aktivität nur für die Bearbeitung von onclicks oder 3.Die Aktivität, die Sie speichern möchten, wenn die Schaltfläche zu einer Bearbeitungstransaktionsseite führt. –

+0

Ich wollte, dass es die mit der Listview ist, da der Adapter dort enthalten ist –

Verwandte Themen