你好:)我已经看过很多关于这个主题的帖子,但我还没有解决我的问题。
在我的应用程序(Android)中,我有一个RecyclerView,我自己的适配器和我自己的ViewHolder。
当我快速滚动时,每行的数据都在洗牌。 (每行包含" x"按钮。按钮数量也会改变。按钮的标签也会改变。)
我的适配器,看起来像这样
public class PostRecyclerAdapter extends RecyclerView.Adapter<PostRecyclerHolders> {
private List<Post> posts;
protected Context context;
private String userId;
public PostRecyclerAdapter(Context context, List<Post> posts,String userId) {
this.posts = posts;
this.context = context;
this.userId = userId;
setHasStableIds(true);
}
@Override
public PostRecyclerHolders onCreateViewHolder(ViewGroup parent, int viewType) {
PostRecyclerHolders viewHolder = null;
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_post_row, parent, false);
viewHolder = new PostRecyclerHolders(layoutView, posts, context);
return viewHolder;
}
@Override
public void onBindViewHolder(PostsRecyclerHolders holder, int position) {
Post post = posts.get(position);
List<But> buts = post.getButs(); //list of But (Contains label and date) max size = 6
holder.label.setText(post.getLabel());
//initialize all button
for(i=0; i<buts.size();i++){
holder.listButs.get(i).setText(buts.get(i).getLabel());
}
//hide other buts
for(int j = i ;j < 6 ; j++){
holder.listsButs.get(j).setVisibility(View.GONE);
}
holder.userId = userId;
}
@Override
public int getItemCount() {
return this.posts.size();
}
@Override
public long getItemId(int position) {
return position;
}
}
我的ViewHolder
public class PostRecyclerHolders extends RecyclerView.ViewHolder{
public TextView libelle;
public LinearLayout butLayout;
public ArrayList<Button> listButs;
public String userId;
public Context context;
private List<Post> postsObj;
public PostRecyclerHolders(final View itemView, final List<Post> postsObj, Context context) {
super(itemView);
this.context=context;
this.postsObj = postsObj;
//list button init
listButs = new ArrayList<Button>();
//initialisation des
libelle = (TextView)itemView.findViewById(R.id.libelle);
butLayout= (LinearLayout)itemView.findViewById(R.id.but_list);
for(int i=0; i<6;i++){
final int butN = i;
Button btn = createButton(context, i);
btnRep.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/* Do something */
}
});
listBut.add(btn);
reponsesLayout.addView(btn);
}
}
//Crate a button
public Button createButton(Context c, int id){
Button b = new Button(c);
b.setText("");
b.setId(getIdButton(id));
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.setMargins(0,50,0,0);
b.setVisibility(View.VISIBLE);
b.setLayoutParams(lp);
b.setBackgroundResource(R.drawable.button_blue);
b.setClickable(true);
b.setTextSize(18);
return b;
}
}
我已将setHasStableIds设置为true并实现了getItemId,但没有任何变化。数据总是随机播放。 有人看到问题出在哪里了?
感谢您的帮助。 (抱歉我的英文)。