禁用RecyclerView

时间:2018-10-09 12:41:19

标签: android android-recyclerview

我正面临下一个问题。

我有一个# name_vec <- LETTERS[1:3] name_vec <- names(df1)[grepl("^[^.]+$",names(df1))] for( name_el in name_vec) { df1[paste0(name_el, ".cv")] <- df1[[paste0(name_el, ".sd")]]/df1[[name_el]] } RecyclerView,物品等。 我需要的是:在回收站中选择一个项目,更改该项目的颜色,然后我必须禁用其他项目。这就像一个Adapter列表。 我选择一个,然后禁用其他。如果我再次选择同一项目,请启用所有列表。 我已经有了onClick RadioButton侦听器。我需要知道是否必须重新加载列表,是否必须逐项循环和禁用等。

谢谢

Button

我的回收站在以下片段中定义:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

private List<Human> humans;
private HumanClick selectedHuman;

@Inject
public MyAdapter() {

}

public void init(List<Human> humanList, SelectedHumanClick humanClick){
    this.humans = humanList;
    this.humanClick = humanClick;
}

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

}

@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
    final Human human = Humans.get(position);
    holder.bind(Humans.get(position));
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            selectedHumanClick.onSelectedHumanClick(Human);
        }
    });
}

@Override
public int getItemCount() {
    return humans != null ? Humans.size() : 0;
}

public final class MyViewHolder extends RecyclerView.ViewHolder {

    @BindView(R.id.text_view_human_name)
    TextView textView;
    @BindView(R.id.image_view_profile)
    ImageView imageViewProf;
    @BindView(R.id.image_view_radio_btn)
    ImageView imageViewRB;

    private boolean isChecked = false;

    public MyViewHolder(View itemView) {
        super(itemView);
        ButterKnife.bind(this, itemView);
    }

    public void bind(final Human Human) {
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                humanClick.onSelectedHumanClick(Human);
            }
        });
        textView.setText(human.getName());
    }

    public void changeRBImage() {
        if(!isChecked){
            isChecked = true;
            imageViewRB.setBackground(ContextCompat.getDrawable(imageViewRB.getContext(), R.drawable.selected));
        }
        else{
            isChecked = false;
            imageViewRB.setBackground(ContextCompat.getDrawable(imageViewRB.getContext(), R.drawable.not_selected));
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我正在考虑使用setOnItemClickListener这样的事情,并检查所单击项目的位置。位置是单击的项目的索引,检查最后一个事件和新事件,如果两者相等,则更改颜色,如果不相等,则不要执行禁用操作。

 private ViewHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        textView = (TextView)view.findViewById(android.R.id.text1);

  }

  @Override
  public void onClick(View view) {
        Toast.makeText(view.getContext(), "position = " + getLayoutPosition(), Toast.LENGTH_SHORT).show();

     //go through each item if you have few items within recycler view
    if(getLayoutPosition()==0){
       //Do whatever you want here

    }else if(getLayoutPosition()==1){ 
       //Do whatever you want here         

    }else if(getLayoutPosition()==2){

    }else if(getLayoutPosition()==3){

    }else if(getLayoutPosition()==4){

    }else if(getLayoutPosition()==5){

    }

    //or you can use For loop if you have long list of items. Use its length or size of the list as 
    for(int i = 0; i<exampleList.size(); i++){

    }


  }
  }

或更小的

 RecyclerView recyclerView = findViewById(R.id.recycler);
 recyclerView.addOnItemTouchListener(
 new RecyclerItemClickListener(context, recyclerView ,new 
 RecyclerItemClickListener.OnItemClickListener() {
  @Override public void onItemClick(View view, int position) {
    // do whatever
  }

  @Override public void onLongItemClick(View view, int position) {
    // do whatever
  }
})
);