我只想知道如何确定ListView中的位置何时发生变化。具体来说,我有一个ListView,当我单击它时TextView文本会改变颜色。问题是,当我点击ListView中的其他位置时,我所处位置的文本颜色保持不变。
基本上,有没有办法在ListView中监听位置变化,然后在该位置发生变化时执行代码?
非常感谢!
答案 0 :(得分:1)
如果您只想一次选择一个项目,请确保在设置ListView时将选择模式设置为单一。
myListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE)
您需要设置onItemClickListener。
myListView..setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
// Your Code Here
}
});
设置ArrayAdapter时,您可以使用其中一个默认的Android项目布局,例如simple_list_item_activated_1
,它会突出显示所选项目的背景。
myArrayAdapter = new ArrayAdapter<String>(getContext(),
android.R.layout.simple_list_item_activated_1, myArrayList);
如果您想要自己的自定义行为,例如更改文本颜色而不是背景,那么只需将项目布局替换为您自己的一个。查看默认的Android项目布局,了解它们如何编写它们。例如,下面是默认的Android项目布局android.R.layout.simple_list_item_activated_1
,您可以在其中看到他们使用名为activatedBackgroundIndicator
的选择器来定义背景颜色。
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:background="?android:attr/activatedBackgroundIndicator"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
/>
<强> <Additional>
强>
在您的情况下,要更改文本颜色而不是背景,您需要使用选择器作为文本颜色。在color
目录中创建一个res
文件夹。在其中创建一个选择器:
<强> my_color_selector.xml
强>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:color="@color/my_red_color />
<item android:drawable="@color/my_blue_color" /> <!-- color when not selected -->
</selector>
然后在您的自定义项目布局中,将文字颜色设置为my_color_selector