Java 向下或向上滑动时在android回收器视图中丢失选定的项目
我制作了一个recycler视图来显示和选择Instagram帖子,在recycler视图适配器中,我处理了onclick来向用户显示项目是否被选中,以及处理所选帖子的总数。。。但当我在页面中滚动时,适配器中的insta post超过12个时,就会出现问题。一些选择的项目显示为未选择,而一些未选择的帖子看起来像是您选择的!!!有人能帮我吗? 这是我的适配器:Java 向下或向上滑动时在android回收器视图中丢失选定的项目,java,android,android-recyclerview,adapter,Java,Android,Android Recyclerview,Adapter,我制作了一个recycler视图来显示和选择Instagram帖子,在recycler视图适配器中,我处理了onclick来向用户显示项目是否被选中,以及处理所选帖子的总数。。。但当我在页面中滚动时,适配器中的insta post超过12个时,就会出现问题。一些选择的项目显示为未选择,而一些未选择的帖子看起来像是您选择的!!!有人能帮我吗? 这是我的适配器: package com.example.pinstagram.adaptor; import android.content.Conte
package com.example.pinstagram.adaptor;
import android.content.Context;
import android.os.Build;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.pinstagram.R;
import com.example.pinstagram.classes.BuyBasketFlow;
import com.example.pinstagram.classes.InstaPosts;
import com.example.pinstagram.classes.SellingItems;
import com.example.pinstagram.viewHolders.InstaPostsRecyclerViewHolders;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
public class InstaPostsRecyclerViewAdapter extends RecyclerView.Adapter<InstaPostsRecyclerViewHolders> {
private List<InstaPosts> instaList;
private List<InstaPosts> selectedPosts;
LinearLayout linearLayout;
private Context context;
TextView numberTextView,eachPostPriceTxt,totalPriceTxt;
BuyBasketFlow buyBasketFlow;
SellingItems sellingItems;
public InstaPostsRecyclerViewAdapter(Context context, List<InstaPosts> itemList,List<InstaPosts> selectedPosts,LinearLayout linearLayout,TextView[] textViews) {
this.instaList = itemList;
this.context = context;
this.selectedPosts = selectedPosts;
this.linearLayout = linearLayout;
numberTextView = textViews[0];
eachPostPriceTxt = textViews [1];
buyBasketFlow = new BuyBasketFlow();
sellingItems = new SellingItems();
selectedPosts.clear();
for(int i = 0; i < instaList.size();i++){
instaList.get(i).setSelected(false);
}
linearLayout.setVisibility(View.GONE);
}
@NonNull
@Override
public InstaPostsRecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.isnta_posts_listview, null);
InstaPostsRecyclerViewHolders crcv = new InstaPostsRecyclerViewHolders(layoutView);
return crcv;
}
@Override
public void onBindViewHolder(@NonNull final InstaPostsRecyclerViewHolders holder, final int position) {
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("Log3", " item number: " + position + " is clicked");
instaList.get(position).setSelected(!instaList.get(position).isSelected());
if(buyBasketFlow.getType().compareTo("like")==0) {
if (instaList.get(position).isCanBeSelect()) {
selectingPhase(holder,position);
} else {
Toast.makeText(context, R.string.just_select_photo, Toast.LENGTH_SHORT).show();
Log.i("Log1", instaList.get(position).getTypename());
}
}else if(buyBasketFlow.getType().compareTo("view")==0){
if (instaList.get(position).isViewCanBeSelected()) {
selectingPhase(holder,position);
} else {
Toast.makeText(context, R.string.just_select_video, Toast.LENGTH_SHORT).show();
Log.i("Log1", instaList.get(position).getTypename());
}
}else if(buyBasketFlow.getType().compareTo("comment")==0){
if (instaList.get(position).isViewCanBeSelected()||instaList.get(position).isCanBeSelect()) {
selectingPhase(holder,position);
} else {
Toast.makeText(context, R.string.just_select_video, Toast.LENGTH_SHORT).show();
Log.i("Log1", instaList.get(position).getTypename());
}
}
}
});
Picasso.get().load(instaList.get(position).getThumbnail_url()).into(holder.instaImage);
}
public List<InstaPosts> getSelectedPosts(){
return selectedPosts;
}
@Override
public int getItemCount() {
return this.instaList.size();
}
private void selectingPhase(InstaPostsRecyclerViewHolders holder,int position){
if (instaList.get(position).isSelected()) {
selectedPosts.add(instaList.get(position));
buyBasketFlow.setPostsArrays(selectedPosts);
for (InstaPosts selected : selectedPosts) {
Log.e("Log1", selected.toString());
}
holder.radioBtn.setImageDrawable(context.getDrawable(R.drawable.radio_button_checked));
holder.cardView.setStrokeWidth(10);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
holder.cardView.setStrokeColor(context.getColor(R.color.colorPrimary));
}
} else {
selectedPosts.remove(instaList.get(position));
buyBasketFlow.setPostsArrays(selectedPosts);
for (InstaPosts selected : selectedPosts) {
Log.e("Log1", selected.toString());
}
holder.cardView.setStrokeWidth(0);
holder.radioBtn.setImageDrawable(context.getDrawable(R.drawable.radio_button_unchecked));
}
if (selectedPosts.size() < 1) {
linearLayout.setVisibility(View.GONE);
Log.i("Log1", "layout must become invisible");
} else {
Log.i("Log1", "layout must become visible");
linearLayout.setVisibility(View.VISIBLE);
sellingItems = buyBasketFlow.getSellingItem();
numberTextView.setText("" + selectedPosts.size());
Log.i("Log1", "" + Integer.parseInt(sellingItems.getPrice()));
String text = "قیمت هر پست" + sellingItems.getPrice() + " تومان ";
String sum = Integer.toString((selectedPosts.size() * Integer.parseInt(sellingItems.getPrice())));
text = text + "و قیمت مجموع " + sum + " تومان ";
eachPostPriceTxt.setText(text);
}
}
}
package com.example.pinstagram.adapter;
导入android.content.Context;
导入android.os.Build;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.LinearLayout;
导入android.widget.TextView;
导入android.widget.Toast;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.recyclerview;
导入com.example.pinstagram.R;
导入com.example.pinstagram.classes.BuyBasketFlow;
导入com.example.pinstagram.classes.InstaPosts;
导入com.example.pinstagram.classes.SellingItems;
导入com.example.pinstagram.viewHolders.InstaPostsRecycleServiceWholders;
导入com.squareup.picasso.picasso;
导入java.util.ArrayList;
导入java.util.List;
公共类InstaPostsRecycleServiceAdapter扩展了RecyclerView.Adapter{
私人名单;
私人名单选定的职位;
线性布局线性布局;
私人语境;
TextView numberTextView、eachPostPriceTxt、totalPriceTxt;
BuyBasketFlow BuyBasketFlow;
销售项目销售项目;
公共InstaPostsRecycleServiceAdapter(上下文上下文、列表项列表、列表所选帖子、LinearLayout LinearLayout、TextView[]文本视图){
this.instaList=itemList;
this.context=上下文;
this.selectedPosts=selectedPosts;
this.linearLayout=linearLayout;
numberTextView=textview[0];
eachPostPriceTxt=textViews[1];
buyBasketFlow=新的buyBasketFlow();
sellingItems=新的sellingItems();
selectedPosts.clear();
对于(int i=0;i=Build.VERSION\u code.M){
holder.cardView.setStrokeColor(context.getColor(R.color.colorPrimary));
}
}否则{
selectedPosts.remove(instaList.get(position));
buyBasketFlow.setpostsarray(selectedPosts);
对于(InstaPosts已选:selectedPosts){
Log.e(“Log1”,selected.toString());
}
支架.卡片视图.设置行程宽度(0);
holder.radioBtn.setImageDrawable(context.getDrawable(R.drawable.radio_按钮未选中));
}
如果(selectedPosts.size()<1){
linearLayout.setVisibility(View.GONE);
Log.i(“Log1”,“布局必须不可见”);
}否则{
Log.i(“Log1”,“布局必须可见”);
线性
InstaPosts instaPosts = instaList.get(position);
holder.cardView.setStrokeWidth(instaPosts.isSelected() ? 10 : 0);
holder.radioBtn.setImageDrawable(context.getDrawable(instaPosts.isSelected() ? R.drawable.radio_button_checked : R.drawable.radio_button_unchecked));