gpt4 book ai didi

android - 在 recyclerview 中滚动时复选框更改状态

转载 作者:行者123 更新时间:2023-11-29 15:00:03 25 4
gpt4 key购买 nike

我制作了一个小应用程序,它显示了我手机上安装的所有应用程序的列表我想在每个卡片 View 中添加一个复选框,以便我可以标记我最喜欢的应用程序和其他分类。问题是当滚动列表时,复选框的状态会发生变化。我检查了 chrome,当我向下滚动然后向上滚动时,chrome 没有标记,随机应用程序被选中。我搜索了与此问题相关的其他问题,但这些解决方案都不适合我。

appsadapter.java 的更新版本

 public class AppsAdapter extends RecyclerView.Adapter<AppsAdapter.ViewHolder>{
private final SparseBooleanArray array=new SparseBooleanArray();

public class ViewHolder extends RecyclerView.ViewHolder{

public CardView cardView;
public ImageView imageView;
public TextView textView_App_Name;
public CheckBox checkBox;

public ViewHolder (View view){

super(view);
checkBox = (CheckBox) view.findViewById(R.id.chckbox);
cardView = (CardView) view.findViewById(R.id.card_view);
imageView = (ImageView) view.findViewById(R.id.imageview);
textView_App_Name = (TextView) view.findViewById(R.id.Apk_Name);
//textView_App_Package_Name = (TextView) view.findViewById(R.id.Apk_Package_Name);

}
}

private Context context1;
private List<String> stringList;

public AppsAdapter(Context context, List<String> list){

context1 = context;
stringList = list;
}

//viewholder initialized
@Override
public AppsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){

View view2 = LayoutInflater.from(context1).inflate(R.layout.cardview_layout,parent,false);
ViewHolder viewHolder = new ViewHolder(view2);
return viewHolder;
}

//DATA IS BOUND TO VIEWS
private SparseBooleanArray sba = new SparseBooleanArray();
@Override
public void onBindViewHolder(ViewHolder viewHolder,final int position){

viewHolder.setIsRecyclable(false);
ApkInfoExtractor apkInfoExtractor = new ApkInfoExtractor(context1);
final String ApplicationPackageName = (String) stringList.get(position);

//calling apps name and icon
String ApplicationLabelName = apkInfoExtractor.GetAppName(ApplicationPackageName);
Drawable drawable = apkInfoExtractor.getAppIconByPackageName(ApplicationPackageName);

//setting app name and icon for every card
viewHolder.textView_App_Name.setText(ApplicationLabelName);
viewHolder.imageView.setImageDrawable(drawable);
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sba.put(position, !sba.get(position));
notifyDataSetChanged();
}
});
viewHolder.checkBox.setChecked(sba.get(position));


/*Adding click listener on CardView to open clicked application directly from here
viewHolder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

Intent intent = context1.getPackageManager().getLaunchIntentForPackage(ApplicationPackageName);
if(intent != null){
context1.startActivity(intent);
}
else {
Toast.makeText(context1,ApplicationPackageName + " Error, Please Try Again.", Toast.LENGTH_LONG).show();
}
}
});*/
}

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

最佳答案

那是因为在回收者 View 中,项目 View 被重新使用来显示新数据。您必须在数据项中添加一个变量,用于保存特定位置复选框的状态。然后在 onBindViewHolder 中,您可以检查跟踪变量的值并设置复选框的状态,如 yourCheckbox.setchecked(item.getSelected()) 设置跟踪变量值在 onCheckChanged 方法中

关于android - 在 recyclerview 中滚动时复选框更改状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48534179/

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