Android 更改listview中选定项目或行的背景颜色
我想更改Listview中所选项目的背景色。如果我选择位置1的项目,我希望所选项目的背景颜色为灰色,而不是文本,而是该行的背景。如果我选择另一个项目,例如位置2,我希望位置1所选项目的背景色恢复为原始颜色,新项目的背景色变为灰色 我一直在使用以下代码: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
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;
}
}
这将更改每个选定项目的背景。我希望未选中的项目恢复为默认白色您是否尝试使用选择器?