gpt4 book ai didi

android - 如何在ListView中的多个项目删除中更改背景颜色

转载 作者:行者123 更新时间:2023-11-29 20:22:39 25 4
gpt4 key购买 nike

我在 ListView 中选择多个项目进行删除。我可以删除多个项目。代码如下:

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");
// Calls toggleSelection method from ListViewAdapter Class
((SmsArrayAdapter) arrayAdapter).toggleSelection(position);

}

@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;
}


});

但是我想改变我选择的行的颜色。目前列表中的选择项没有颜色。

enter image description here

如何更改所选项目行的颜色?

arrayadapter的代码如下:

public class SmsArrayAdapter extends ArrayAdapter<SMSItem> {

List<SMSItem> smsBody;
Context context;
private static LayoutInflater inflater = null;
String fromNumber;
private SparseBooleanArray mSelectedItemsIds;

public SmsArrayAdapter(Context context, int resource,
List<SMSItem> smsBody, String fromNumber) {
super(context, resource, smsBody);
this.smsBody = smsBody;
this.context = context;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.fromNumber = fromNumber;
mSelectedItemsIds = new SparseBooleanArray();
}

public SMSItem getStr(int position) {
return smsBody.get(position);
}

public void setRead(int position, String smsMessageId) {
smsBody.get(position).status = true;
SMSItem smsItem = smsBody.get(position);
smsItem.status = true;
//smsBody.set(position, smsItem);
ContentValues values = new ContentValues();
values.put("read",true);
int flag = context.getContentResolver().update(Uri.parse("content://sms/inbox"),
values, "_id=" + smsMessageId, null);
Toast.makeText(context, "The result is "+flag, Toast.LENGTH_LONG).show();

/* Uri uri = Uri.parse("content://sms/inbox");
String selection = "address = ? AND body = ? AND read = ?";
String from = "03590000004";
String body =smsItem.sms;
String[] selectionArgs = {from, body, "0"};

ContentValues values = new ContentValues();
values.put("read", true);

int flag = context.getContentResolver().update(uri, values, selection, selectionArgs);
Toast.makeText(context, "The result is "+flag, Toast.LENGTH_LONG).show(); */

}

@Override
public int getCount() {
// TODO Auto-generated method stub
return super.getCount();
}

@Override
public SMSItem getItem(int position) {
// TODO Auto-generated method stub
return smsBody.get(position);
}

public static class ViewHolder {
public TextView textfrom;
public TextView text_sms;
public TextView text_time;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Toast.makeText(context, "The index is "+position, Toast.LENGTH_LONG).show();
ViewHolder holder;
if (convertView == null) {

/****** Inflate tabitem.xml file for each row ( Defined below ) *******/
convertView = inflater.inflate(R.layout.row_item, null);

/****** View Holder Object to contain tabitem.xml file elements ******/

holder = new ViewHolder();

holder.textfrom = (TextView) convertView
.findViewById(R.id.textView_from);
holder.text_sms = (TextView) convertView
.findViewById(R.id.textView_sms);
holder.text_time = (TextView) convertView
.findViewById(R.id.textView_time);

/************ Set holder with LayoutInflater ************/
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.textfrom.setText(" " + fromNumber);
SMSItem smsItem = smsBody.get(position);
String smsTextToDisplay = smsItem.sms;
if (smsTextToDisplay.length() > 100)
smsTextToDisplay = smsTextToDisplay.substring(0, 99) + " ...";

holder.text_sms.setText(smsTextToDisplay);
//View.setBackground(selectedIds.contains(position) ? R.color.result_image_border : android.R.color.transparent);
holder.text_time.setText(smsItem.time);
if (smsItem.status == false) {
convertView.setBackgroundColor(context.getResources().getColor(
R.color.light_blue_overlay));
}
else
{
convertView.setBackgroundColor(Color.WHITE);
}
return convertView;
}

public SparseBooleanArray getSelectedIds() {
// TODO Auto-generated method stub
return mSelectedItemsIds;
}

public void removeSelection()
{
// TODO Auto-generated method stub
mSelectedItemsIds = new SparseBooleanArray();
notifyDataSetChanged();
}

public void toggleSelection(int position) {
// TODO Auto-generated method stub
selectView(position, !mSelectedItemsIds.get(position));
}

public void selectView(int position, boolean value) {
if (value)
mSelectedItemsIds.put(position, value);
else
mSelectedItemsIds.delete(position);
notifyDataSetChanged();
}

}

最佳答案

编辑:

第 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>

第 3 步:在 Drawable 文件夹中创建 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>

在这里你可以写你自己的颜色而不是@color/lvMultipleSelectionColor

希望对您有所帮助。

关于android - 如何在ListView中的多个项目删除中更改背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32967872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com