我一直在制作一个可以在Android中使用ListView的应用程序,但我无法使所选(chacked)项具有不同的背景。我用的是CHOICE_MODE_SINGLE。到目前为止,我的代码是这样的:
我使用的列表视图:
(inside layout.xml)
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:listSelector="@drawable/selector_test" >
</ListView>
我在适配器中使用的TextView布局:
(listItem.xml)
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="23sp"
android:textStyle="bold" />
这是我添加适配器的地方:
mListAdapter = new ArrayAdapter<String>(this, R.layout.listItem, mList);
mListView = (ListView) findViewById(R.id.listView);
mListView.setAdapter(mAuthorAdapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
String selected = mList.get(position);
// ...
mListView.setItemChecked(position, true);
}
});
我确信在单击时选中了正确的项,因为当我调用getCheckedItemPosition()时,它会返回正确的值。
现在,为了突出显示选中的项目,我尝试了两件事:
选择器可绘制:
(Selector_test.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_longAnimTime">
<item android:state_checked="true"><shape>
<solid android:color="@color/red" />
</shape></item>
<item android:state_selected="true"><shape>
<solid android:color="@color/blue" />
</shape></item>
<item android:state_pressed="true"><shape>
<solid android:color="@color/green" />
</shape></item>
</selector>
我把它添加到。包含以下内容的xml:
android:listSelector="@drawable/selector_test"
背景可绘制:
(Background_test.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/red" android:state_checked="true"/>
<item android:drawable="@color/blue" android:state_selected="true"/>
<item android:drawable="@color/green"/>
</selector>
我把它添加到。包含以下内容的xml:
android:background="@drawable/background_test"
我已经尝试将选择器和背景添加到两个listView中。xml和listItem。xml,但唯一改变的是默认背景颜色,以及按下(或按住)项目时选择器的颜色
android:state_checked=“true”和android:state_selected=“true”似乎什么都不做
我可以通过覆盖ArrayAdapter中的getView()方法来更改背景,如果选择了视图,则在其中调用setBackgroundColor(),并且它确实更改了背景,但也完全取消了选择器。此外,我真的不喜欢仅仅为了更改一行代码而重写类,尤其是如果同样的事情可以通过不同的方式实现的话
所以我想问的是,是否有一种方法可以通过添加选择器或背景绘图来突出显示ListView中的选中项,而我只是做错了,或者我必须以其他方式使其工作
提前感谢!:)
以编程方式使用setSelector。例如:
lv.setSelector(R.color.abc_background_cache_hint_selector_material_dark);
试试这个:
listViewDay.setItemChecked(position, true);
listViewDay.setSelection(position);
列表项。xml
<?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="40dp"
android:background="@drawable/list_day_selector" >
<TextView
android:id="@+id/txtItemDay"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"
android:text="22"
android:textColor="@android:color/white"
android:textSize="22sp" />
</LinearLayout>
列出你的选择。xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/list_item_bg_normal" android:state_activated="false"/>
<item android:drawable="@drawable/bg_with_left_arrow" android:state_pressed="true"/>
<item android:drawable="@drawable/bg_with_left_arrow" android:state_activated="true"/>
</selector>
在活动开始时添加此行
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
其中lv是listView的实例
然后重写此方法并向其添加以下行。
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Set the item as checked to be highlighted
lv.setItemChecked(position, true);
v.setBackgroundColor(Color.BLUE);
conversationAdapter.notifyDataSetChanged();
}
然后在自定义适配器的getView方法中将上一个选定项的背景颜色更改回正常
问题内容: 我有两个,一个包含一个由选择查询()填充的客户端列表,另一个包含选定的客户端的详细信息()。我想在显示细节的同时让客户保持选中状态。 XML: Java: 问题答案: 若要在按下时保持列表视图项目的颜色,请在列表视图项目布局中包括以下行: 然后在这样的文件夹中定义: 最后,将此包含在你的中: 这样,在任何时候都只能选择一项。你可以使用以下方式定义颜色值res/values/colors
我有一个Gridview,当我按下某个元素时,我想绘制背景。 我有一个适配器来动态加载gridview元素。我在适配器上有一个侦听器。在这个侦听器上,我用我想要的颜色放置背景,但它也会在列表中绘制另一个元素(我猜是在视图重新加载后,位置相同的元素)。 重要提示:我的最小API是9,我无法真正更改它。 以下是我的 getView 方法的代码(来自适配器): 下面是线性布局的侦听器(表示每个项目):
我使用gridview在我的gridview中选择多个项目(图像)。 我使用< code > MultiChoiceModeListener 来实现这一点,问题是选中的项目没有突出显示 选择器xml: 当我触摸一个项目时,它被蓝色覆盖(我认为这是因为我使用了< code > GridView . setdrawselectorontop(true);)...我一抬起手指,蓝色就消失了。 我希望选择
实际行为 预期行为 至于我使用的代码,主加载了一个,其中调度页是真正的罪魁祸首,扩展了Xamarin.Forms.TabbedPage。SelectedPage被正确设置(加载正确的contentpage),但选项卡没有突出显示。 null
问题内容: 我必须为ListView项添加另一种突出显示颜色。我为项目使用自定义适配器,并且我有以下代码: 布局: 项目布局代码: 选择器代码: color.xml的代码: 但是我有一个问题:ListView项不会通过单击更改颜色!始终为白色。我在哪里弄错了? 问题答案: 这是您的操作方式: 首先,在您的中,输入以下内容: 这使您的listSelector(单击列表视图时通常看到的颜色)透明。 接
问题内容: 我找不到能帮助我解决Angular中这个简单问题的东西。与位置路径进行比较时,所有答案都与导航栏相关。 我使用list和构建了一个动态表。当我单击一行时,我试图为该行分配一个css类(选中),以突出显示该行已被用户选中的事实,并从先前突出显示的行中删除了该行。 我缺少在选定的行和CSS类分配之间进行绑定的方法。 我在每个()上应用了代码, 但我缺少应用更改的逻辑。 我的代码-Plunk