Android 更改listview中选定项目或行的背景颜色

Android 更改listview中选定项目或行的背景颜色,android,Android,我想更改Listview中所选项目的背景色。如果我选择位置1的项目,我希望所选项目的背景颜色为灰色,而不是文本,而是该行的背景。如果我选择另一个项目,例如位置2,我希望位置1所选项目的背景色恢复为原始颜色,新项目的背景色变为灰色 我一直在使用以下代码: public void onItemClick (AdapterView < ? > parent, View view, int position, long id){ for (int j = 0; j < pare

我想更改Listview中所选项目的背景色。如果我选择位置1的项目,我希望所选项目的背景颜色为灰色,而不是文本,而是该行的背景。如果我选择另一个项目,例如位置2,我希望位置1所选项目的背景色恢复为原始颜色,新项目的背景色变为灰色

我一直在使用以下代码:

public void onItemClick (AdapterView < ? > parent, View view,
int position, long id){
    for (int j = 0; j < parent.getChildCount(); j++)
        parent.getChildAt(j).setBackgroundColor(Color.TRANSPARENT);

    // change the background color of the selected element
    view.setBackgroundColor(Color.LTGRAY);
}

但是,它会自动更改每十个项目的背景。

删除该循环。改用这个:

YourList.getChildAt(position).setBackgroundColor(Color.LTGRAY)

我最终做了以下几件事:

在我的适配器类中

public class OrderlistAdapter extends RecyclerView.Adapter<OrderlistAdapter.OrderViewHolder>
{

    private List<Order> orders;
    private Context context;
    private OrderClickListener orderClickListener;
    private int selectedPosition=-1;

    public OrderlistAdapter(Context context, List<Order> orders, OrderClickListener orderClickListener)
    {
        this.context = context;
        this.orders = orders;
        this.orderClickListener = orderClickListener;
    }

    @NonNull
    @Override
    public OrderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
    {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.order_list_item, parent, false);
        return new OrderViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull OrderViewHolder holder, int position)
    {

        Order order = orders.get(position);
        String orderStatus = checkStatus(order.getOrder_status());

        String date = null;
        try
        {
            date = formatDate(order.getOrder_date_added());
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }
        holder.order_id.setText(order.getOrder_id());
        holder.ordered_date.setText(date);
        holder.order_status.setText(orderStatus);

        if(selectedPosition==position)
        {
            holder.itemView.setBackgroundColor(Color.parseColor("#F57C00"));
        }
        else if(isComplete(order.isFullyProcessed()))
        {
            holder.itemView.setBackgroundColor(Color.parseColor("#C0C0C0"));
            //holder.view.setSelected(true);
        }
        else
        {
            holder.itemView.setBackgroundColor(Color.parseColor("#ffffff"));
        }

        holder.view.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                orderClickListener.onItemClicked(position);
                selectedPosition = position;
                notifyDataSetChanged();
            }
        });

        if(isComplete(order.isFullyProcessed()))
        {

        }
    }


    public class OrderViewHolder extends RecyclerView.ViewHolder
    {
        @BindView(R.id.textViewOrderId)
        TextView order_id;
        @BindView(R.id.textViewDateAdded)
        TextView ordered_date;
        @BindView(R.id.textViewOrderStatus)
        TextView order_status;
        public View view;

        public OrderViewHolder(View itemView)
        {
            super(itemView);
            ButterKnife.bind(this, itemView);
            this.view = itemView;
        }

    }

这将更改每个选定项目的背景。我希望未选中的项目恢复为默认白色您是否尝试使用选择器?