我有一个具有 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 中的一个项目。他一放手,就什么都没有了。
现在我无法弄清楚真正导致问题的原因。
- 我的 ListView 是否在某处失去了选择支持
- 选择器的 XML 是否完全错误
- 我是否应该向适配器添加选择支持(这似乎很奇怪,因为它应该独立于视图)
免责声明:我看过一些相关的问题,但它们并没有真正帮助我。
另外,由于长城,我目前无法访问大部分在线文档