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?
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();
Je sais qu'il est tard pour répondre mais il y a 2 façons de plus de le faire:
Vous pouvez également envoyer broadcast
depuis adapter
et l'enregistrer dans fragment
.
Utilisez l'interface. Reportez-vous ceci SO question pour plus de détails.