微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用actionmode和selectiontracker实现全选按钮以选择recyclerview中的所有项目?

如何解决如何使用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 中的 clear 选项,我使用了 selectionTracker 的功能来清除所有选定的项目。我也期待类似的全选解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。