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)
这是因为在触摸模式下没有焦点或选择。您处于使用检查状态的正确轨道。您只需要使用具有不同状态的可绘制状态。
脚步:
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中设置该状态,您将全部完成。在您触摸其他项目之前,背景将一直保持这种状态。
| 归档时间: |
|
| 查看次数: |
6249 次 |
| 最近记录: |