web-dev-qa-db-fra.com

Appeler une méthode Fragment depuis un adaptateur

J'ai une méthode sendData() dans mon fragment. Cette méthode démarre une nouvelle activité. Je veux appeler cette méthode depuis mon ArrayAdapter.

Voici mon code: -

AccueilFragment.Java

stagAdaper = new StaggeredAdapter(myContext, Android.R.layout.simple_list_item_1, getList);
            mGridView.setAdapter(stagAdaper);
    private void sendData(int position)
    {

        myDialog = new ProgressDialog(myContext).show(getActivity(), "Fetching news..", "Just a moment");

        myDialog.getWindow().setContentView(R.layout.openarticlewaitprogress);
        myDialog.getWindow().setTitle("Loading..");
        myDialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
         new  NewsDetails(myDialog);



            Intent nIntent = new Intent(getActivity(),Details.class);

               String Body=getList.get(position).getBody();

            newsIntent.putExtra("Body", Body);


            startActivity(nIntent);

    }

StaggeredAdapter.Java

viewHolder.layGridLayout.setOnClickListener(new View.OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub
            //viewHolder.layGridLayout.setForeground(R.drawable.foreground_selector);

        }
    });
    return convertView;
    }

Comment puis-je le faire?

37
user3713706

Edit: Voici ce que j'utiliserais maintenant. Des solutions plus anciennes et "plus faciles" sont disponibles ci-dessous.

MyFragment extends Fragment implements CustomAdapter.EventListener {

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        CustomAdapter adapter = new CustomAdapter(..., this);

    }

    void onEvent(int data) {
        doSomething(data);
    }

}

CustomAdapter extends BaseAdapter {

    EventListener listener; 

    public interface EventListener {
        void onEvent(int data);   
    }

    public CustomAdapter(..., EventListener listener) {
        this.listener = listener; 
    }

    ...

}

À partir de n'importe quel endroit de l'adaptateur, nous pouvons maintenant appeler listener.onEvent(data); pour déclencher la méthode dans le fragment.

De plus, au lieu de fournir un écouteur via le constructeur, nous pouvons ajouter une autre méthode dans l'adaptateur telle que registerListener(EventListener eventListener) puis conserver une liste d'écouteurs si nécessaire.

Ancienne réponse:

Solution 1: faites de l'adaptateur une classe interne de votre fragment, afin de pouvoir appeler directement la méthode.

Solution 2: mettez à jour le constructeur de votre adaptateur pour accepter le fragment comme paramètre.

Quelque chose comme :

customAdapter = new CustomAdapter(myContext, Android.R.layout.simple_list_item_1, getList, HomeFragment.this);

et mettez à jour le constructeur de l'adaptateur:

public CustomAdapter(Context context, int id, HomeFragment fragment) {
    this.fragment = fragment;
}

puis vous appelez des méthodes en utilisant la variable fragment.

fragment.doSomething();
134
Shivam Verma

Je sais qu'il est tard pour répondre mais il y a 2 façons de plus de le faire:

  1. Vous pouvez également envoyer broadcast depuis adapter et l'enregistrer dans fragment.

  2. Utilisez l'interface. Reportez-vous ceci SO question pour plus de détails.

1
Faisal Shaikh