Introduction :
La création d'un canal de communication entre un fragment et un adaptateur de curseur personnalisé peut faciliter un échange de données transparent et la gestion des événements entre ces composants.
Problème :
Un fragment contient un ListView associé à un adaptateur de curseur. L'adaptateur comporte un bouton dans chaque ligne de la liste avec un écouteur onClick. Le but est de notifier le fragment lorsque ce bouton est enfoncé.
Solution :
Définir une interface dans l'adaptateur:
Implémentez l'interface dans le fragment :
Passez le fragment en tant qu'argument à l'adaptateur :
Invoquez l'interface à partir de OnClickListener de l'adaptateur :
Exemple de code :
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 } }
Utilisation :
Créer une instance de l'adaptateur, en passant le fragment comme argument :
MyListAdapter adapter = new MyListAdapter (getActivity(), myCursor, myFlags, this);
Attention aux changements d'orientation:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!