我有一个有ListView的活动,我已经创建了一个自定义适配器 基于BaseAdapter。
自定义适配器的GetView方法使用自定义布局:
view = context.LayoutInflater.Inflate(Resource.Layout.BluetoothDeviceListItem, null);
布局如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/BluetoothDeviceListSelector">
<TextView android:id="@+id/txtBluetoothDeviceName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
style="@android:style/TextAppearance.Large"/>
<TextView android:id="@+id/txtBluetoothDeviceAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
style="@android:style/TextAppearance.Medium"/>
</LinearLayout>
基本上我会显示蓝牙设备的名称及其下方的地址 但我希望用户能够在ListView中选择一个项目,该项目应该是 保持突出显示(至少)或者我可能想要添加一个图标或其他任何内容。
据我所知,由于我使用的是自定义布局,因此我丢失了默认选择指示器 并且必须使用我自己的选择器。我在在线教程中发现了类似的内容:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="#E77A26"
android:endColor="#1DB38B"
android:angle="270" />
</shape>
</item>
<item android:state_selected="true">
<shape>
<gradient
android:startColor="#E77A26"
android:endColor="#2B37AE"
android:angle="270" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<gradient
android:startColor="#E77A26"
android:endColor="#EEFFEE"
android:angle="270" />
</shape>
</item>
</selector>
但唯一可以做的就是在用户按下并保持时改变颜色 ListView中的项目。一旦他放手,就不再突出显示任何内容了。
现在我无法弄清楚究竟是什么导致了这个问题。
免责声明:我已经看到了一些相关的问题,但它们并没有真正帮助我 此外,由于长城
,我目前无法访问大部分在线文档答案 0 :(得分:3)
最后,基于@CommonsWare评论,我只使用了激活状态:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="#E77A26"
android:endColor="#1DB38B"
android:angle="270" />
</shape>
</item>
<item android:state_activated="true">
<shape>
<gradient
android:startColor="#E77A26"
android:endColor="#EEFFEE"
android:angle="270" />
</shape>
</item>
</selector>
那就是说,我现在已经不再显示所选项目了 单击项目后直接导航到新活动,以符合Android设计指南。
答案 1 :(得分:1)
您可以将所选位置保留在内存中。在适配器中,添加变量以存储所选项。然后在getView()
方法内,如果当前位置等于您选择的项目,请执行不同的操作。如果您想突出显示您的商品setBackgroundColor()
。
这是一个例子
@Override public View getView(int position, View convertView,
ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.my_xml_file, parent,false); }
if(position==selectedPosition){
row.setBackgroundColor(Color.parseColor("#800ff000")); }
else{
row.setBackgroundColor(Color.TRANSPARENT); }
return row; }