从适配器Android中选择

时间:2018-04-25 10:13:56

标签: java android android-recyclerview kotlin adapter

我想实现此UI以使用户一次选择一个分支。 我现在所做的是当用户选择它时,每个项目中的文本的setCompoundDrawablesWithIntrinsicBounds。

enter image description here

问题是"如果我选择项目编号1然后选择项目编号4,如何从项目编号1中删除选择?我不想再次点击第1项以删除选择"

请注意,此屏幕仅供用户选择一个项目。

这是我在Kotlin的代码但是如果你在JAVA中建议一个解决方案就可以了:

var selectedBranch = false
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    holder.packageNumber.text = branches?.get(position)?.nameEn ?: ""
    check = ContextCompat.getDrawable(context, R.drawable.ic_select_branch)
    holder.itemView.setOnClickListener {

        if(!selectedBranch) {
        holder.packageNumber.setCompoundDrawablesWithIntrinsicBounds(null, null, check, null)
            selectedBranch = true
        }
        else {
            holder.packageNumber.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null)
            selectedBranch = false
        }
    }
}

4 个答案:

答案 0 :(得分:1)

1.创建一个包含

Model
String text;
boolean isTextSelected;

2.单击适配器中的项目,Update您的模型类' isTextSelected'字段。

3. Notify你的adpater。

答案 1 :(得分:0)

你需要添加这个" selectedBranch"数据类中的布尔值,您在分支列表中用作模型

将此代码添加到bindViewHolder

return(,$resTable)

我希望它有效。

答案 2 :(得分:0)

不是在每个项目中使用标记,而是 Use integer variable to store the last clicked position

最初clickedposition=-1

在适配器类中使用它,

if(position == clickedposition) {

        holder.packageNumber.setCompoundDrawablesWithIntrinsicBounds(null, null, check, null)
}
else {
        holder.packageNumber.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null)

}

holder.itemView.setOnClickListener {
      clickedposition=position;
      notifyDataSetChanged();
}

答案 3 :(得分:0)

将一个布尔变量带入branche pojo类。 然后将接口转换为适配器以将click事件处理到recyclelerview,如下面的代码..

  onItemClickListner onItemClickListner;

public void setOnItemClickListner(RecyclerViewAdpater.onItemClickListner onItemClickListner) {
    this.onItemClickListner = onItemClickListner;
}

public interface onItemClickListner {
    void onClick(Branch str);//pass your object types.
}



@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    // below code handle click event on recycler view item.
    Branch data=branches.get(position);
    if (data.isSelected()){
    }
    else{

    }
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClickListner.onClick(data);
        }
    });
}

然后在适配器绑定到代码后面的recycleler视图调用..

recyclerViewAdpater.setOnItemClickListner(new RecyclerViewAdpater.onItemClickListner() {
        @Override
        public void onClick(Branch str)
        {
            str.setSelected(true);
            recyclerViewAdpater.notifyDataSetChanged();
        }

    });