Einführung:
Das Erstellen eines Kommunikationskanals zwischen einem Fragment und einem benutzerdefinierten Cursoradapter kann den nahtlosen Datenaustausch erleichtern und Ereignisbehandlung zwischen diesen Komponenten.
Problem:
A Fragment enthält eine ListView, die einem Cursoradapter zugeordnet ist. Der Adapter verfügt in jeder Listenzeile über eine Schaltfläche mit einem onClick-Listener. Das Ziel besteht darin, das Fragment zu benachrichtigen, wenn diese Schaltfläche gedrückt wird.
Lösung:
Definieren Sie eine Schnittstelle im Adapter:
Implementieren Sie die Schnittstelle im Fragment:
Übergeben Sie das Fragment als Argument an den Adapter:
Rufen Sie die Schnittstelle über den OnClickListener des Adapters auf:
Beispielcode:
public class MyListAdapter extends CursorAdapter { public interface AdapterInterface { public void buttonPressed(); } private AdapterInterface buttonListener; public MyListAdapter (Context context, Cursor c, int flags, AdapterInterface buttonListener) { super(context,c,flags); this.buttonListener = buttonListener; } @Override public void bindView(final View view, final Context context, final Cursor cursor) { ViewHolder holder = (ViewHolder) view.getTag(); ... holder.button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { buttonListener.buttonPressed(); } }); } } public MyListFragment extends Fragment implements AdapterInterface { @Override public void buttonPressed() { // some action } }
Verwendung:
Erstellen Sie eine Instanz von Adapter, der das Fragment als Argument übergibt:
MyListAdapter adapter = new MyListAdapter (getActivity(), myCursor, myFlags, this);
Achtung bei Orientierungsänderungen:
Das obige ist der detaillierte Inhalt vonWie implementiert man die Kommunikation zwischen einem Fragment und einem benutzerdefinierten Cursor-Adapter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!