Android RecyclerView更改所选项目背景和文本颜色
我正在使用Android RecyclerView更改所选项目背景和文本颜色,android,android-recyclerview,android-xml,android-relativelayout,Android,Android Recyclerview,Android Xml,Android Relativelayout,我正在使用RecyclerView。我试图用selector.xml文件更改项目单击中的背景色 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/trains_vagon_selected_departure" android:state_pressed="true" /> <item andr
RecyclerView。
我试图用selector.xml
文件更改项目单击中的背景色
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/trains_vagon_selected_departure" android:state_pressed="true" />
<item android:drawable="@drawable/trains_vagon_selected_departure" android:state_focused="true" />
<item android:drawable="@drawable/trains_vagon_selected_white" />
</selector>
适配器代码:
public class TrainsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public ArrayList<Train> trains;
public Context context;
private LayoutInflater inflater;
private String statusString = "";
public TrainsAdapter(Context context, ArrayList<Train> trains, String statusString) {
this.context = context;
this.trains = trains;
inflater = LayoutInflater.from(context);
this.statusString = statusString;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.trains_adapter_item, parent, false);
GenericViewHolder holder = new GenericViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if (holder instanceof GenericViewHolder) {
final GenericViewHolder genericViewHolder = (GenericViewHolder) holder;
genericViewHolder.vagoncontainer.removeAllViews();
Train train = trains.get(position);
if (statusString.equals("departure"))
genericViewHolder.statusImageView.setImageResource(R.mipmap.departure_icon);
else
genericViewHolder.statusImageView.setImageResource(R.mipmap.return_icon);
ArrayList<Vagons> vagons = train.getVagons();
for (int i = 0; i < vagons.size(); i++) {
if (vagons.get(i).getEnable().equals("1")) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
final LinearLayout vagonView = (LinearLayout) layoutInflater.inflate(R.layout.trains_vagon_child, null);
genericViewHolder.vagoncontainer.setBackgroundColor(Color.WHITE);
RelativeLayout relativeLayout = (RelativeLayout) vagonView.findViewById(R.id.selected_layout);
if (statusString.equals("departure"))
relativeLayout.setBackgroundResource(R.drawable.recyclerview_selected_departure);
else
relativeLayout.setBackgroundResource(R.drawable.recyclerview_selected_returned);
TextView vagonClassName = (TextView) vagonView.findViewById(R.id.vagon_class_name);
TextView vagonClassPrice = (TextView) vagonView.findViewById(R.id.vagon_class_price);
vagonClassName.setText(vagons.get(i).getName());
vagonClassPrice.setText(vagons.get(i).getAmount());
genericViewHolder.vagoncontainer.addView(vagonView);
}
}
genericViewHolder.trainTime.setText(train.getDeparture());
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemCount() {
return trains.size();
}
public Train getItem(int position) {
return trains.get(position);
}
@Override
public int getItemViewType(int position) {
return position;
}
public class GenericViewHolder extends RecyclerView.ViewHolder {
public TextView trainTime;
public LinearLayout vagoncontainer;
private ImageView statusImageView;
public GenericViewHolder(View view) {
super(view);
trainTime = (TextView) view.findViewById(R.id.train_time);
statusImageView = (ImageView) view.findViewById(R.id.departure_next_img);
vagoncontainer = (LinearLayout) view.findViewById(R.id.vagon_container);
}
}
}
公共类TrainsAdapter扩展了RecyclerView.Adapter{
公共列车;
公共语境;
私人充气机;
私有字符串statusString=“”;
公共TrainsAdapter(上下文上下文、ArrayList列、字符串状态字符串){
this.context=上下文;
这个.火车=火车;
充气器=充气器。从(上下文);
this.statusString=statusString;
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=充气机。充气(R.layout.trains\u adapter\u项,父项,false);
GenericViewHolder=新的GenericViewHolder(视图);
报税表持有人;
}
@凌驾
public void onBindViewHolder(RecyclerView.ViewHolder,最终int位置){
if(通用视图持有者的持有者实例){
最终GenericViewHolder GenericViewHolder=(GenericViewHolder)持有人;
genericViewHolder.vagoncontainer.removeAllViews();
Train Train=trains.get(位置);
if(statusString.equals(“离开”))
genericViewHolder.statusImageView.setImageResource(R.mipmap.deeption_图标);
其他的
genericViewHolder.statusImageView.setImageResource(R.mipmap.return_图标);
ArrayList vagons=train.getVagons();
对于(int i=0;i
我有两个问题
1) 当我运行RecyclerView
中的第一个元素时,也会自动选择。为什么?我怎样才能修好它
2) 是否可以更改选择器xml
文件中的文本颜色?
我知道如何按位置更改simple recyclerView的背景和文本颜色,但目前按位置的每个元素都有一些数组,我将其添加到我的位置,并尝试更改孩子的视图背景和文本颜色(请参阅我的代码。我指的是vagonView视图)
谢谢大家。当您运行应用程序时,它可能会被选中,因为打开了
状态\u focus=“true”
android:textColor
1) 当我运行时,第一个元素已被选中2)你是什么意思?你能再解释一下吗@塞萨里奥2号。假设您有一个文本视图,将
textColor
设置为某个颜色状态列表(选择器xml),但您需要为文本颜色创建另一个xml
,您是对的,但当我将默认值写为false时,则焦点始终不工作@Hasmukh kachhatiya,然后您必须尝试state\u pressed=“true”
我试过了,第一次自动选择了first element@Hasmukh Kachhatiya你能继续聊天吗?@哈斯穆克·卡切迪亚