java - 如何更改项目单击时的列表项目外观。

标签 java android xml

在我的应用程序中,我有水平 ListView 。在项目选择上,我想更改所选项目的背景颜色及其 TextView 颜色。我已经弄清楚了那部分。但是如何重置先前选定项目的背景颜色和 TextView 颜色。这是我的适配器类。

public class DateRangeListViewAdapter extends RecyclerView.Adapter<DateRangeListViewAdapter.ContentViewHolder>  {

private ItemClickListener itemClickListener;
private LayoutInflater inflater;
private ArrayList<String> data;
private Context context;
private int dataType;
private int previousSelectedPosition;
private static final int DATE_TYPE = 1;
private static final int STATUS_TYPE = 2;

public DateRangeListViewAdapter(ArrayList<String> data, Context context,int dataType) {
    this.data = data;
    this.context = context;
    this.dataType = dataType;
    inflater  = LayoutInflater.from(context);
    previousSelectedPosition = -1;
}

public void setItemClickListener(ItemClickListener itemClickListener) {
    this.itemClickListener = itemClickListener;
}

@Override
public ContentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.custom_date_range_list_item,parent,false);
    return new ContentViewHolder(view);
}

@Override
public void onBindViewHolder(ContentViewHolder holder, int position) {
    String name = data.get(position);
    holder.dateText.setText(name);
}

@Override
public int getItemCount() {
    return data.size();
}


public class ContentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private FrameLayout main;
    private TextView dateText;

    public ContentViewHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        main = (FrameLayout) itemView.findViewById(R.id.main_layout);
        dateText = (TextView) itemView.findViewById(R.id.date_name);
    }

    @Override
    public void onClick(View v) {

        //Selected item color change
        main.setBackground(ContextCompat.getDrawable(context,R.drawable.date_range_selected_item_background));
        dateText.setTextColor(ContextCompat.getColor(context,R.color.colorPrimary));

        if(itemClickListener!=null){
            itemClickListener.onItemClick(v,this.getLayoutPosition(),dataType,getOldPosition());
        }
    }
}

public interface ItemClickListener{
    public void onItemClick(View v, int position,int dataType,int oldPosition);
    }
}

最佳答案

你基本上想充分利用你的 int 标志,previousSelectedPosition ,要跟踪单击的列表项的位置,请调用 notifyDataSetChanged() ,然后将该标志设置为 onBindViewHolder() 内的条件语句的一部分当 ViewHolder 的 View 不断被绑定(bind)时,相应地更新它们。尝试以下更改:

ViewHolder 的 onClick():

@Override
public void onClick(View v) {
    if (itemClickListener!=null) {
        previousSelectedPosition = getAdapterPosition();

        notifyDataSetChanged();

        itemClickListener.onItemClick(v,this.getLayoutPosition(),dataType,getOldPosition());
    }
}

RecyclerView.Adapter的onBindViewHolder():

@Override
public void onBindViewHolder(ContentViewHolder holder, int position) {
    String name = data.get(position);
    holder.dateText.setText(name);

    if (previousSelectedPosition == position) {
        main.setBackground(ContextCompat.getDrawable(context,R.drawable.date_range_selected_item_background));
        dateText.setTextColor(ContextCompat.getColor(context,R.color.colorPrimary));
    } else {
        // TODO: Configure the FrameLayout and TextView here for initial runtime as well as back to default
    }
}

...是的,请务必保留 previousSelectedPosition初始运行时初始化为 -1,就像 onBindViewHolder() 中的条件一样直到标志更新(即单击列表项后)才重要。

关于java - 如何更改项目单击时的列表项目外观。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44867297/

相关文章:

java - 尝试通过复制数组来计算出某个字符集在更大的字符集中出现了多少次。出现错误+这是最好的方法吗?

JavaFX:如何获取虚拟流中显示的 TableView 的行数

java - 添加库后无法合并dex错误

android - 如何将自定义 View /布局固定在 CollapsingToolbarLayout 中?

java - 使用 Jersey 解析 XML 中的复杂对象

java - Lifefay freemarker ADT : methods unavailable?

Java Oracle localhost 数据库连接(java.lang.ClassNotFoundException)

android - 如果从 Play 商店下载应用程序,设备上是否有 Play 服务?

java - JAXB 解码列表

python - 将 XML 转换为 Dict/JSON