J'ai trois classes à savoir. un fragment, un recyclerViewAdapter et un recyclerViewHolder. Ils travaillent de la manière habituelle. Mais maintenant j'ai un problème, j'ai besoin d'appeler une méthode dans le ViewHolder de ladite activité.Comment appeler la méthode ViewHolder à partir de l'activité/Fragment
Je pensais utiliser des rappels, mais j'ai essayé et ça ne fonctionne pas. Voilà ce que je l'ai fait jusqu'à présent:
L'interface
public interface TreeBottomListener {
enum Status {FAILED, SUCCESS, PRE_REQUEST}
void onResponse(Status status);
}
Le ViewHolder
public class TreeBottomViewHolder extends RecyclerView.ViewHolder implements TreeBottomListener{
@BindView(R.id.tree_bottom_progress) ProgressBar bottomProgress;
@BindView(R.id.tree_error_button) Button moreRetryButton;
private TreeAdapterListener listener;
private final String TAG = "TreeBottomViewHolder";
public TreeBottomViewHolder(View itemView, final TreeAdapterListener listener) {
super(itemView);
ButterKnife.bind(this, itemView);
this.listener = listener;
setUpViews();
}
private void setUpViews() {
bottomProgress.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor
(itemView.getContext(), R.color.colorAccent), PorterDuff.Mode.SRC_IN);
moreRetryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setVisibility(View.GONE);
listener.onLoadMoreClicked();
}
});
}
@Override
public void onResponse(Status status) {
processViews(status);
}
private void processViews(Status status) {
// This method is never called
Log.i(TAG, "onResponse: with status " + status);
if (status == Status.FAILED) {
bottomProgress.setVisibility(View.GONE);
moreRetryButton.setVisibility(View.VISIBLE);
} else if (status == Status.SUCCESS) {
bottomProgress.setVisibility(View.GONE);
} else if (status == Status.PRE_REQUEST) {
bottomProgress.setVisibility(View.VISIBLE);
}
}
}
Le fragment
private TreeBottomListener bottomListener = bottomCallbacks;
private static TreeBottomListener bottomCallbacks = new TreeBottomListener() {
@Override
public void onResponse(Status status) {
}
};
// I do this say when a network request is about to be sent
bottomListener.onResponse(TreeBottomListener.Status.PRE_REQUEST);
Voir [link] (http://stackoverflow.com/questions/32720702/how-to-call-a-mainactivity-method-from-viewholder-in-recyclerview-adapter) pour votre référence –
@vijaychhalotre, Merci. Je l'ai déjà vu, mais je veux faire est la méthode inverse d'appel ViewHolder de Fragment/Activity. – X09
Vous ne devriez pas faire cela. Cela rendra votre code étroitement couplé et très complexe. La tâche de l'adaptateur doit être d'afficher les éléments dans la liste ou recyclerView. L'activité ne doit pas interagir directement avec l'adaptateur ou ViewHolder. Si vous souhaitez actualiser les éléments de la liste, modifiez la liste des données de l'adaptateur et appelez la méthode notifydatasetChange. – nnn