【问题标题】:highlight selected row in recylerview android在recyclerview android中突出显示选定的行
【发布时间】:2021-12-11 21:55:51
【问题描述】:

我试图突出显示选定的行,但滚动后突出显示的颜色消失了,因此很难知道选定的行。我已经尝试过像how to highlight the selected Item of Recycler View? 这样的各种解决方案,但结果是一样的。这是我的实现

public static List<Model> items = new ArrayList<>();
boolean isSelectMode = false;
public  List<Model> selectList = new ArrayList<>();


     @Override
     public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = 
        LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false);
        
        return new MyViewHolder(view);

    }
    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, int
            position) {
            
        if (!selectList.contains(items.get(getAdapterPosition()))){
               holder.itemView.setBackgroundColor(Color.TRANSPARENT);
            } else {
                holde.itemView.setBackgroundResource(R.color.red);
            }

            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    isSelectMode = true;
                    if (selectList.contains(items.get(holder.getAdapterPosition()))){
                        holder.itemView.setBackgroundColor(Color.TRANSPARENT);
                        selectList.remove(items.get(holder.getAdapterPosition()));
                    } else {
                        holder.itemView.setBackgroundResource(R.color.red);
                        selectList.add(items.get(holder.getAdapterPosition()));
                    }
                    if (selectList.size() == 0){
                        isSelectMode = false;
                    }
                    return true;
                }
            });
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (isSelectMode){
                        if (selectList.contains(items.get(holder.getAdapterPosition()))){
                            holder.itemView.setBackgroundColor(Color.TRANSPARENT);
                            selectList.remove(items.get(holder.getAdapterPosition()));
                        } else {
                            holder.itemView.setBackgroundResource(R.color.red);
                            selectList.add(items.get(holder.getAdapterPosition()));
                        }
                        if (selectList.size() == 0){
                            isSelectMode = false;
                        }
                    }
                }
            });

    }    
    @Override
    public int getItemCount() {
        if (items != null) {
            return items.size();
        }
        return 0;
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
 
            public MyViewHolder(@NonNull View itemView) {

            super(itemView);

            

这是我在其中设置 rv 的片段类。

public class FilesFragment extends Fragment {
 

public FilesFragment() {
    // Required empty public constructor
}

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    setHasOptionsMenu(true);

    view = inflater.inflate(R.layout.fragment_files, container, false);
    recyclerView = view.findViewById(R.id.filesRV);

    if (items!= null && items.size() > 0) {
        myAdapter = new MyAdapter(getActivity(), getItems(requireActivity()));
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false));
        recyclerView.setAdapter(myAdapter);
    }
  
  }

}

public class Model{

    public long id;
    public String path;
    private boolean isSelect;


  
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }


    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }


    public boolean isSelect() {
        return isSelect;
    }

    public void setSelect(boolean select) {
        isSelect = select;
    }


    public Model(Long id, String path, boolean isSelect) {
        this.id = id;
        this.path = path;
        this.isSelect = isSelect;

    }
 }

【问题讨论】:

    标签: android-recyclerview highlight


    【解决方案1】:

    onBindViewHolder 中添加这些行。即检查位置是否在 selected_list 中。

                   if (!selectList.contains(items.get(getAdapterPosition()))){
                       holder.itemView.setBackgroundColor(Color.TRANSPARENT);
                    } else {
                        holde.itemView.setBackgroundResource(R.color.red);
                    }
    

    【讨论】:

    • 感谢您的回答,但没有任何变化,结果相同。
    • 你能显示onBindViewHolder的代码吗?它应该工作。我以前用过这个
    • 我已经编辑了上面的代码。
    • 将我的答案行复制粘贴到holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { 之前的onbindHolder
    • 我按照你的要求做了,但答案还是一样的。正如您所建议的,我已将整个代码放在上面。
    猜你喜欢
    • 2017-04-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    相关资源
    最近更新 更多