Android 如何更改ListView中删除多个项目行中的背景色
我正在listview中选择要删除的多个项目。我可以删除多个项目。代码如下:Android 如何更改ListView中删除多个项目行中的背景色,android,listview,android-listview,Android,Listview,Android Listview,我正在listview中选择要删除的多个项目。我可以删除多个项目。代码如下: smsListView.setMultiChoiceModeListener(new MultiChoiceModeListener() { @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long
smsListView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode,
int position, long id, boolean checked) {
// Capture total checked items
final int checkedCount = smsListView.getCheckedItemCount();
// Set the CAB title according to total checked items
mode.setTitle(checkedCount + " Selected");
View v = smsListView.getChildAt(position
- smsListView.getFirstVisiblePosition());
// Calls toggleSelection method from ListViewAdapter Class
((SmsArrayAdapter) arrayAdapter).toggleSelection(position,v);
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.delete:
// Calls getSelectedIds method from ListViewAdapter Class
SparseBooleanArray selected = ((SmsArrayAdapter) arrayAdapter)
.getSelectedIds();
// Captures all selected ids with a loop
for (int i = (selected.size() - 1); i >= 0; i--) {
if (selected.valueAt(i)) {
SMSItem selecteditem = (SMSItem) arrayAdapter.getItem(selected.keyAt(i));
// Remove selected items following the ids
arrayAdapter.remove(selecteditem);
}
}
// Close CAB
mode.finish();
return true;
default:
return false;
}
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
((SmsArrayAdapter) arrayAdapter).removeSelection();
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
});
但我想更改所选行的颜色。当前列表中的选择项上没有颜色
我试过以下方法
步骤1:在listview项目布局的行下方写入
android:background="?android:attr/activatedBackgroundIndicator"
步骤2:将下面的行写入style.xml文件
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<item name="actionBarStyle">@style/MyActionBar</item>
<item name="android:activatedBackgroundIndicator">@drawable/muliple_selected_item</item>
</style>
@样式/MyActionBar
@可抽取/多个选定项目
步骤3:将muliple_selected_item.xml创建到Drawable文件夹中,并编写以下代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@color/lvMultipleSelectionColor" />
<item android:state_checked="true" android:drawable="@color/lvMultipleSelectionColor" />
<item android:state_pressed="true" android:drawable="@color/lvMultipleSelectionColor" />
<item android:drawable="@android:color/transparent" />
</selector>
但根据这段代码,当我选择listview中的任何项目时,列表中的所有项目都会上色。我只想将背景颜色更改为我选择的项目。
我该怎么做
listview布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/MainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/smsItemContainerRelativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:layout_gravity="center_horizontal|top"
android:text="SMS Inbox"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/unread_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="-20dp"
android:background="@drawable/notification_bg"
android:gravity="center"
android:text="88"
android:textColor="@android:color/background_light"
android:textSize="20sp"
android:textStyle="bold"
android:layout_alignParentRight="true"
android:visibility="invisible" />
</RelativeLayout>
<ListView
android:id="@+id/SMSList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp" />
</LinearLayout>
行布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/muliple_selected_item" >>
<TextView
android:id="@+id/textView_from"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SMS From"
android:textAppearance="?android:attr/textAppearanceLarge" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView_sms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="SMS : " />
<TextView
android:id="@+id/textView_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:text="Time : " />
</LinearLayout>
</LinearLayout>
>
muliple_selected_item.xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@color/lvMultipleSelectionColor" />
<item android:state_checked="true" android:drawable="@color/lvMultipleSelectionColor" />
<item android:state_pressed="true" android:drawable="@color/lvMultipleSelectionColor" />
<item android:drawable="@android:color/transparent" />
</selector>
您可以使用可绘图工具进行如下操作
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_activated="true"
android:drawable="@android:color/darker_gray" />
</selector>
并将其设置为行布局的背景
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_item_background_activated" >
</RelativeLayout>
您需要将多选模式设置为您的
列表视图
smsListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
您需要为列表视图的
行布局创建可绘制文件,并在该布局中使用可绘制
作为背景
以下是可绘制文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/menuitem_press_background_color" android:state_activated="true" />
<item android:drawable="@color/white" />
</selector>
编辑:
移除selectView()
中使用的changeBackgroundColor()
,并检查其是否有效
你可以参考这个。这可能对你有帮助
您可以通过以下方式实现:-
只需在单行xml文件(定义listview单行布局的xml文件)中添加以下行:- 无需再编辑任何xml文件。有关更多详细信息,请访问以下链接:-
希望这有帮助:)我正在关注这个链接。你能发布你的xml吗?我必须发布哪种xml?包含ListView的xml请看这个,我已经完成了。但是没有注意到行背景颜色的变化。请发布您的listview布局和listview行布局显示多个选中的项目文件,并设置android:choiceMode=“MultipleChice”您是否已在xml和java文件中设置choicemode?是的,我已在xml和java文件中设置choicemode。我可以选择listview的多个项目。我面临的唯一问题是在所选项目中没有注意到背景色。我已经做到了。但是没有注意到行背景颜色的变化。它可以工作,它会改变颜色,但在我的例子中,它会将颜色更改为黑色,而我看不到视图,如何在不影响初始项颜色的情况下在其中定义特定颜色?
SMSItem selecteditem = (SMSItem) arrayAdapter.getItem(selected.keyAt(i));
selecteditem.setSelection(checked);
notifydatasetChanged();
android:background="?android:attr/activatedBackgroundIndicator"