gpt4 book ai didi

android - 滚动 RecyclerView 也会更改其他数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:41 24 4
gpt4 key购买 nike

我正在使用 RecyclerView 来显示项目列表。我有两个 TextViews,一个在另一个下面。最初,第二个 TextView 设置为 singleline = true。现在在单击项目时,我正在设置 singleline = false。这只是为了在单击时展开它(如 ExpandableList)。代码工作正常,但问题是,由于 RecyclerView 使用回收项目,其他项目的 TextView 值也被设置为 singleline = false。现在我该如何避免这种情况?

代码

public class InboxAdapter extends RecyclerView.Adapter<InboxAdapter.InboxViewHolder> {

private Context context;
private List<InboxModel> listInbox;
private InboxModel currentItem;

public InboxAdapter(Context context, List<InboxModel> listInbox) {
this.context = context;
this.listInbox = listInbox;
}

@Override
public InboxViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.custom_inbox_item, parent, false);
InboxViewHolder viewHolder = new InboxViewHolder(view);
return viewHolder;
}

@Override
public void onBindViewHolder(final InboxViewHolder holder, int position) {

currentItem = listInbox.get(position);
holder.tvHeader.setText(currentItem.header);
holder.tvMsg.setText(currentItem.msg);

holder.tvHeader.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

holder.tvMsg.setSingleLine(false);
LinearLayout.LayoutParams lp= (LinearLayout.LayoutParams) holder.tvMsg.getLayoutParams();
lp=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
holder.tvMsg.setLayoutParams(lp);

}
});

}

@Override
public int getItemCount() {
return listInbox.size();
}

class InboxViewHolder extends RecyclerView.ViewHolder {

private TextView tvImageHeader;
private TextView tvHeader;
private TextView tvMsg;
private TextView tvDate;


public InboxViewHolder(View itemView) {
super(itemView);

tvImageHeader = (TextView) itemView.findViewById(R.id.tv_img_header);
tvHeader = (TextView) itemView.findViewById(R.id.tv_header);
tvMsg = (TextView) itemView.findViewById(R.id.tv_msg);
tvDate = (TextView) itemView.findViewById(R.id.tv_date);
}
}

最佳答案

您必须在所有情况 中设置该属性以避免回收元素出现问题。

    @Override
public void onBindViewHolder(final InboxViewHolder holder, int position){

//....

if (currentItem.myBoolean){
holder.tvMsg.setSingleLine(true);
} else {
holder.tvMsg.setSingleLine(false);
}

//...
}

在您的点击事件中,只需更改对象内的值(而不是 View !)。像这样的东西:

holder.tvHeader.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentItem.myBoolean = true;
//call the notify !
}
});

如果此状态是独占的,则不要在项目内使用变量,而是在适配器内使用变量 (InboxModel checkedItem)。

关于android - 滚动 RecyclerView 也会更改其他数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34368171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com