gpt4 book ai didi

android - 删除自定义 ListView 中的多个选定项目不适用于 ImageButton

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:45 25 4
gpt4 key购买 nike

这对我来说非常必要。我正在尝试创建一个 delete multiple selected items ListView。代码运行正常,但是当我将 ImageButton 添加到 custom_list_row.layout 时,它不起作用。我不知道这个问题。也许有同样的问题,但我没有找到。

代码:

使用后

smsList.setAdapter(customListViewAdapter);

尝试使用此代码删除所选项目

smsList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
smsList.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
final int checkedCount = smsList.getCheckedItemCount();
// Set the CAB title according to total checked items
mode.setTitle(checkedCount + " Selected");
// Calls toggleSelection method from ListViewAdapter Class
customListViewAdapter.toggleSelection(position);
}

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.delete_menu_option, menu);
return true;
}

@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {

case R.id.delete:
// call getSelectedIds method from customListViewAdapter
SparseBooleanArray selected = customListViewAdapter.getSelectedIds();
// Captures all selected ids with a loop
for (int i = (selected.size() - 1); i >= 0; i--) {
if (selected.valueAt(i)) {
SmsClass selectedListItem = (SmsClass) customListViewAdapter.getItem(selected.keyAt(i));
// Remove selected items using ids
customListViewAdapter.remove(selectedListItem);
}
}
mode.finish();
return true;
default:
return false;
}
}

@Override
public void onDestroyActionMode(ActionMode mode) {
customListViewAdapter.removeSelection();
}
});

适配器代码:

public class CustomListViewAdapter extends ArrayAdapter{

Context context;
private SparseBooleanArray selectedListItemsIds;
List multipleSelectionList;

public CustomListViewAdapter(Context context, int resourceId, List items) {
super(context, resourceId, items);
this.context = context;
selectedListItemsIds = new SparseBooleanArray();
this.multipleSelectionList = items;
}
/*private view holder class*/
private class ViewHolder {
ImageView imgCountryFlag;
TextView txtCountryName;
TextView txtCountryCode;
ImageButton click;
}

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
SmsClass rowItem = (SmsClass) getItem(position);

LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate( R.layout.list_item_row, null);
holder = new ViewHolder();
holder.txtCountryCode = (TextView) convertView.findViewById(R.id.name);
holder.txtCountryName = (TextView) convertView.findViewById(R.id.date);
holder.click = (ImageButton)convertView.findViewById( R.id.click);

convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();

holder.txtCountryCode.setText(rowItem.getBody());
holder.txtCountryName.setText(rowItem.getNumberInside());
return convertView;
}

public void remove(SmsClass object) {
multipleSelectionList.remove(object);
notifyDataSetChanged();
}

public void toggleSelection(int position) {
selectView(position, !selectedListItemsIds.get(position));
}

public void removeSelection() {
selectedListItemsIds = new SparseBooleanArray();
notifyDataSetChanged();
}

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

public int getSelectedCount() {
return selectedListItemsIds.size();
}

public SparseBooleanArray getSelectedIds() {
return selectedListItemsIds;
}
}

最佳答案

最后,我找到了答案:我们必须设置

    android:descendantFocusability="blocksDescendants"

在根列表项元素中并设置

    android:focusableInTouchMode="true"

ImageButton View 中。

关于android - 删除自定义 ListView 中的多个选定项目不适用于 ImageButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52184157/

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