【发布时间】: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