Heim >Java >javaLernprogramm >Wie implementiert man die Kommunikation zwischen einem Fragment und einem benutzerdefinierten Cursor-Adapter?

Wie implementiert man die Kommunikation zwischen einem Fragment und einem benutzerdefinierten Cursor-Adapter?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-16 07:29:02426Durchsuche

How to Implement Communication Between a Fragment and a Custom Cursor Adapter?

Schnittstelle zwischen Fragment und Adapter

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:

  1. Definieren Sie eine Schnittstelle im Adapter:

    • Erstellen Sie ein AdapterInterface innerhalb der Adapterklasse mit einer Methode buttonPressed().
  2. Implementieren Sie die Schnittstelle im Fragment:

    • Implementieren Sie in der Fragmentklasse das AdapterInterface und Überschreiben Sie buttonPressed() Methode.
  3. Übergeben Sie das Fragment als Argument an den Adapter:

    • Fügen Sie der Adapterklasse einen Konstruktor hinzu akzeptiert ein AdapterInterface-Objekt.
    • Übergeben Sie beim Instanziieren des Adapters das Fragment (das AdapterInterface implementiert) als Argument.
  4. Rufen Sie die Schnittstelle über den OnClickListener des Adapters auf:

    • Legen Sie in der bindView()-Methode des Adapters fest onClick-Listener für die Schaltfläche.
    • Rufen Sie im Listener die buttonPressed()-Methode von auf das übergebene Fragment.

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
    }
}
  1. Verwendung:

    • Erstellen Sie eine Instanz von Adapter, der das Fragment als Argument übergibt:

      MyListAdapter adapter = new MyListAdapter (getActivity(), myCursor, myFlags, this);
  2. Achtung bei Orientierungsänderungen:

    • Beachten Sie, dass die Fragmenterstellung bei Ausrichtungsänderungen zu einem verbleibenden Adapterverweis auf ein nicht vorhandenes Fragment führen kann. Um dies zu verhindern, sollten Sie auch den Adapter neu erstellen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn