ListView.setChoiceMode和自定义列表项

时间:2013-04-29 22:21:06

标签: android android-listview actionbarsherlock

SherlockListFragment我使用android.R.layout.simple_list_item_activated_1显示单行文字。我正在使用以下内容让ListView在选中时自动突出显示列表项...

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

这很好用。

但是,我有另一个SherlockListFragment使用带有两个TextView小部件的列表项布局,如下所示...

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="5dp">
    <TextView
        android:id="@+id/gl_item_single_start_time_short"
        ...
        >
    </TextView>
    <TextView 
        android:id="@+id/gl_item_single_title"
        ...
        >
    </TextView>
</RelativeLayout>

我想做的是在选择列表项时自动突出显示第二个TextViewgl_item_single_title)。

问题是 - 我该怎样做才能实现这一目标?我可以在TextView上设置一个属性,还是我必须自己处理适配器返回的视图?

1 个答案:

答案 0 :(得分:1)

  

我正在使用android.R.layout.simple_list_item_activated_1来显示一行文字。

我认为您的意思是使用自android.R.layout.simple_list_item_activated_1以来android.R.layout.simple_list_item_activated_1复制的自己的布局。

  

我想做的是在选择列表项时自动突出显示第二个TextView(gl_item_single_title)。

我认为你的意思是你希望它的行为与android.R.layout.simple_list_item_activated_2一样,并为你的选择提供持续的亮点。

  

我该怎么做才能实现这一目标?

复制android:background="?android:attr/activatedBackgroundIndicator"并修改以适应。或者,在其他布局上使用res/values-v11/。但请注意,这仅适用于API Level 11 +。

如果您想要适用于所有API级别的内容,请执行以下操作:

首先,在activated目录中使用一个定义一些新样式(例如<style name="activated" parent="android:Theme.Holo"> <item name="android:background">?android:attr/activatedBackgroundIndicator</item> </style> )扩展您的应用主题:

res/values/

然后,在<style name="activated"> </style> 中,将相同的样式定义为无操作:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:padding="2dip"
  android:minHeight="?android:attr/listPreferredItemHeight"
  style="@style/activated"
>
  <ImageView android:id="@+id/flag"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical|left"
    android:paddingRight="4dip"
  />
  <TextView android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical|right"
    android:textSize="5mm"
  />
</LinearLayout>

最后,将该样式应用于行布局:

{{1}}