选择了Android listview数组适配器

时间:2012-04-11 11:26:13

标签: java android listview layout

我正在尝试向列表视图添加上下文操作模式,但是我在选择时遇到了一些问题,如果我创建List1.setSelection(position)它没有选择任何内容,如果我生成{{ 1}}它有效,但它只改变了一点字体颜色,我希望它改变背景或更值得注意的东西,有没有办法检测选择,手动和改变背景,或者我错过了什么? BR />

清单:

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>

使用布局:

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;
    }

}

1 个答案:

答案 0 :(得分:4)

这是因为在触摸模式下没有聚焦或选择。使用选中状态,您在正确的轨道上。您只需要使用具有不同状态的状态。

步骤:

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"
> 

2)在drawable文件夹中创建一个新的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>

就是这样。它不是直观的,但是当你启用了检查状态时,“激活”基本上意味着“已检查”。

使用该设置(并使列表行可以检查),现在您将在处于选中状态时将背景从正常状态更改为蓝色。添加代码以在onTouch或onClick中设置该状态,您将全部设置。背景将保持这种状态,直到您触摸另一个项目。