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.
Schwer zu beantworten, ohne den Code zu sehen ... –
scheint wie nicht so gut geschriebenen Code, aber ohne jede Zeile ... – snachmsm
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