选择了Android ListView阵列适配器

Joa*_*vcm 2 java layout android listview

我正在尝试向列表视图添加上下文操作模式,但是我在选择时遇到了一些问题,如果我选择了List1.setSelection(position)它,则不会选择任何东西,如果我使用了List1.setItemChecked(position, true)它,但它只会更改字体颜色小,我希望它改变背景或更值得注意的东西,有什么方法可以检测到选择并手动更改背景,还是我错过了什么?

列表:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ListView
         android:id="@+id/list1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:choiceMode="singleChoice"
      android:drawSelectorOnTop="false">
    </ListView>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

适配器:

public class ServicesRowAdapter extends ArrayAdapter<String[]> {
    private final Activity context;
    private final ArrayList<String[]> names;
    static class ViewHolder {
        public TextView Id;
        public TextView Date;
        public RelativeLayout statusbar,bglayout;
    }

    public ServicesRowAdapter(Activity context, ArrayList<String[]> names) {
        super(context, R.layout.servicesrowlayout, names);
        this.context = context;
        this.names = names;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
        if (rowView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            rowView = inflater.inflate(R.layout.servicesrowlayout, null);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.Id = (TextView) rowView.findViewById(R.id.idlabel);
            viewHolder.Date = (TextView) rowView.findViewById(R.id.datelabel);
            rowView.setTag(viewHolder);
        }

        ViewHolder holder = (ViewHolder) rowView.getTag();

        holder.Date.setText(names.get(position)[2]);
        holder.Id.setText(names.get(position)[1]);
        return rowView;
    }

}
Run Code Online (Sandbox Code Playgroud)

使用布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <TextView
        android:id="@+id/idlabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:gravity="right"
        android:text="@+id/idlabel"
        android:textSize="20dp"
        android:width="70dp" >

    </TextView>
        <TextView
        android:id="@+id/datelabel"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@+id/datelabel"
        android:textSize="20dp"
        android:layout_marginLeft="90dp" >
    </TextView>

</RelativeLayout
Run Code Online (Sandbox Code Playgroud)

Bar*_*rak 5

这是因为在触摸模式下没有焦点或选择。您处于使用检查状态的正确轨道。您只需要使用具有不同状态的可绘制状态。

脚步:

1)在您的row_layout.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/item_selector"
> 
Run Code Online (Sandbox Code Playgroud)

2)像这样在可绘制文件夹中创建一个新的xml文件(名称与您在行布局中使用的名称匹配)(请注意,我已经设置了color.xml文件,因此可以使用@ color / color不,您可以简单地在其中放入十六进制颜色代码):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_activated="true" 
        android:drawable="@color/blue" />
</selector>
Run Code Online (Sandbox Code Playgroud)

而已。这不是很直观,但是当您启用选中状态时,“激活”基本上意味着“选中”。

通过该设置(并使列表行可检查),您现在将背景从处于检查状态的通常的背景更改为蓝色。添加代码以在onTouch或onClick中设置该状态,您将全部完成。在您触摸其他项目之前,背景将一直保持这种状态。