Comment obtenir une référence à un ViewHolder depuis un autre ViewHolder? (RecyclerView)
J'ai un RecyclerView
avec certains view
's/card
's (appelons ça de la vue pour l'instant), qui contiennent tous les mêmes choses, y compris une View
que je suis en utilisant une barre de division.
Je veux être en mesure de modifier les propriétés de cette barre de division dans le view
au-dessus de l'actuel. Donc, dis-je, cliquez sur la carte qui dit test3
je veux être en mesure de définir les propriétés de la barre de division dans le test2
view
.
À préciser:
J'ai seulement besoin d'une référence à la ViewHolder
pour la vue ci-dessus (ou n'importe quel autre), le seul que je clique, c'est tout. Comment dois-je faire cela?
public class StuffManagerAdapter extends RecyclerView.Adapter<StuffManagerAdapter.MyViewHolder> {
private List<StuffManagerClass> stuffList;
private Context context;
private String TAG = "CStA";
DBHandler dbHandler;
ArrayList<String> tagArray = new ArrayList<>();
RecyclerView mRecyclerView;
public StuffManagerAdapter(List<StuffManagerClass> stuffList, Context context) {
this.stuffList = stuffList;
this.context = context;
dbHandler = DBHandler.getInstance(context);
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView DeviceTV, NameTV, TagTV;
private ImageButton editButton, deleteButton;
public ImageView tagWarningImage;
View view, bottomBar ,cover;
public MyViewHolder(final View view) {
super(view);
this.view = view;
DeviceTV = (TextView) view.findViewById(R.id.SMVFDeviceTextView);
//etc., etc.
editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do stuff
}
});
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do stuff
}
});
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_stuffmanagervariablefragment, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final StuffManagerClass sc = stuffList.get(position);
//Initialize card, set all textviews
holder.DeviceTV.setText(sc.getDevice());
holder.NameTV.setText(sc.getName());
holder.TagTV.setText(sc.getTag());
sc.setPosition(position);
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//This is where I would like to get a reference to the divider bar on the other view/card
}
});
}
@Override
public int getItemCount() {
return stuffList.size();
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- TextViews and stuff -->
<View
android:id="@+id/SMVFDividerBar"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_below="@+id/LL2"
android:layout_centerHorizontal="true"
android:layout_marginLeft="7dp"
android:layout_marginRight="7dp"
android:background="@color/colorPrimaryDark">
</RelativeLayout>
</FrameLayout>
source d'informationauteur Timmiej93
Vous devez vous connecter pour publier un commentaire.
Ne sais pas pourquoi je n'avais pas compris cela plus tôt, mais il fonctionne.
Tout d'abord, créez une variable d'instance (merci de me corriger si ce n'est pas une variable d'instance).
Ensuite, affecter cette variable dans le
onCreateViewHolder()
méthode comme ceci:Puis, dans votre
onBindViewHolder()
méthode, vous pouvez accéder à d'autresViewHolder
'comme ceci:Vous pouvez la mettre à une variable, ou d'appeler des trucs comme
findViewById()
directement.Évidemment, vous pouvez entrer manuellement n'importe quelle position que vous voulez dans la
getChildAt()
déclaration, et vous pouvez trouver n'importe quel objet dans la vue à l'aide defindViewById()
.il aurait été facile si vous avez posté votre carte code de trop,
bien lorsque vous cliquez sur un élément, il vous donne sa position et vous pouvez gérer d'autres articles trop par mItems.getAdapterPosition() +1 ou -1
ici est simple exemple
Dans votre
onClickListerner
dansViewHolder
tout ce que vous devez faire est de