android - 如何使用actionmode和selectiontracker实现全选按钮以选择recyclerview中的所有项目?
问题描述
我的 MainActivity 中有这段代码
recyclerView.setAdapter(customAdapter);
customAdapter.submitList(path_list);
selectionTracker = new SelectionTracker.Builder<>(
"my-selection-id",
recyclerView,
new ScrollKeyProvider(1, path_list),
new ScrollItemDetailsLookup(recyclerView),
StorageStrategy.createLongStorage()
)
.withOnItemActivatedListener(new OnItemActivatedListener<Long>() {
@Override
public boolean onItemActivated(@NonNull ItemDetailsLookup.ItemDetails<Long> item, @NonNull MotionEvent e) {
Log.d("TAG", "Selected ItemId: " + item.toString());
return true;
}
})
.withOnDragInitiatedListener(new OnDragInitiatedListener() {
@Override
public boolean onDragInitiated(@NonNull MotionEvent e) {
Log.d("TAG", "onDragInitiated");
return true;
}
}).build();
customAdapter.setSelectionTracker(selectionTracker);
selectionTracker.addObserver(new SelectionTracker.SelectionObserver() {
@Override
public void onItemStateChanged(@NonNull Object key, boolean selected) {
super.onItemStateChanged(key, selected);
}
@Override
public void onSelectionRefresh() {
super.onSelectionRefresh();
}
@Override
public void onSelectionChanged() {
super.onSelectionChanged();
if (selectionTracker.hasSelection() && actionMode == null) {
actionMode = startSupportActionMode(new ActionModeController(ScrollActivity.this, selectionTracker));
actionMode.getMenu().findItem(R.id.action_item_count).setTitle("" + selectionTracker.getSelection().size());
} else if (!selectionTracker.hasSelection() && actionMode != null) {
actionMode.finish();
actionMode = null;
} else {
actionMode.getMenu().findItem(R.id.action_item_count).setTitle("" + selectionTracker.getSelection().size());
}
Iterator<String> itemIterable = selectionTracker.getSelection().iterator();
while (itemIterable.hasNext()) {
Log.i("TAG", itemIterable.next());
}
}
@Override
public void onSelectionRestored() {
super.onSelectionRestored();
}
});
这是我的 ActionMode 回调代码
public class ActionModeController implements ActionMode.Callback {
private final Context context;
private final SelectionTracker selectionTracker;
public ActionModeController(Context context, SelectionTracker selectionTracker) {
this.context = context;
this.selectionTracker = selectionTracker;
}
@Override
public boolean onCreateActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.action_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(androidx.appcompat.view.ActionMode mode, MenuItem item) {
if(item.getItemId()==R.id.action_clear){
if (selectionTracker.hasSelection()){
selectionTracker.clearSelection();
}
}
else if(item.getItemId()==R.id.action_select_all){
// **THIS IS PLACE WHERE I NEED HELP TO ENTER CODE FOR SELECT ALL FUNCTIONALITY**
}
return false;
}
@Override
public void onDestroyActionMode(androidx.appcompat.view.ActionMode mode) {
selectionTracker.clearSelection();
}
}
为了使用 SelectionTracker 在 Recyclerview 中选择所有项目,我应该在 onActionItemClicked 中选择所有部分时做什么?
您可以在 onActionItemClicked 中看到清除选项,我使用了 selectionTracker 的功能来清除所有选定的项目。我也期待选择所有选项的类似解决方案。
解决方案
推荐阅读
- python - 来自 Automatetheboringstuff 的多个剪贴板项目不起作用
- jsf - 单击按钮后如何在primefaces树中停止行选择
- unix - 仅针对特定用户的 SSH 身份验证绕过密码身份验证
- javascript - 刷新页面时通过 URL 传递值
- assembly - 矩形的面积
- javascript - GPS经纬度
- testing - Mocha 单元测试 javascript 中的模拟变量
- jquery - Laravel:Ajax - 如何“强制”从存储目录下载 pdf
- javascript - 如何迭代地缩放一个值,但仍然达到原始值的特定部分?
- ansible - 如何处理来自 ansible 角色的错误