有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Recyclerview SelectionTracker上正确设置泛型?

我有一个Recyclerview,正在实现一个SelectionTracker。我有一个警告:

Unchecked assignment: '安卓x.recyclerview.selection.ItemDetailsLookup.ItemDetails' to '安卓x.recyclerview.selection.ItemDetailsLookup.ItemDetails<java.lang.Long>'

我似乎无法修复。如果我从ItemDetailsLookup类中删除<Long>,警告将移动到SelectionTracker生成器。我在下面附上了我的代码

这些是我的重写类:


    class ListItemSelectionPredicate extends SelectionTracker.SelectionPredicate<Long> {
        @Override
        public boolean canSetStateForKey(@NonNull Long key, boolean nextState) {
            return selectionEnabled;
        }

        @Override
        public boolean canSetStateAtPosition(int pos, boolean nextState) {
            return selectionEnabled;
        }

        @Override
        public boolean canSelectMultiple() {
            return true;
        }
    }

    class ListItemKeyProvider extends ItemKeyProvider<Long> {

        private RecyclerView mRecyclerView;

        ListItemKeyProvider(RecyclerView recyclerView) {
            super(ItemKeyProvider.SCOPE_MAPPED);

            mRecyclerView = recyclerView;
        }

        @Override
        public Long getKey(int pos) {
            return listAdapter.getItemId(pos);
        }

        @Override
        public int getPosition(@NonNull Long key) {
            ListAdapter.ViewHolder viewHolder
                    = (ListAdapter.ViewHolder) mRecyclerView.findViewHolderForItemId(key);

            return viewHolder.getLayoutPosition();
        }
    }

    class ListItemDetailsLookup extends ItemDetailsLookup<Long> {

        private RecyclerView mRecyclerView;

        ListItemDetailsLookup(RecyclerView recyclerView) {
            mRecyclerView = recyclerView;
        }

        @Override
        public ItemDetails<Long> getItemDetails(@NonNull MotionEvent e) {
            View view = mRecyclerView.findChildViewUnder(e.getX(), e.getY());

            return view == null
                    ? null
                    : ((ListAdapter.ViewHolder) mRecyclerView.getChildViewHolder(view)).getItemDetails();
        }
    }

警告出现在这一行:

            return view == null
                    ? null
                    : ((ListAdapter.ViewHolder) mRecyclerView.getChildViewHolder(view)).getItemDetails();

这是我对SelectionTracker的实例化,它是一次性创建的


        listTracker = new SelectionTracker.Builder<>(
                "list-item-selection"
                , listRecycler
                , new StableIdKeyProvider(listRecycler)
                , new ListItemDetailsLookup(listRecycler)
                , StorageStrategy.createLongStorage())
                .withSelectionPredicate(
                        new ListItemSelectionPredicate()
                )
                .build();

这是我的getItemDetails方法,它嵌套在我的viewHolder类中


        ItemDetailsLookup.ItemDetails<Long> getItemDetails() {
            return new ItemDetailsLookup.ItemDetails<Long>() {

                @Override
                public int getPosition() {
                    return getAdapterPosition();
                }

                @Override
                public Long getSelectionKey() {
                    return getItemId();
                }
            };
        }

关于类型转换的警告(我想是吧?)这不应该发生


共 (0) 个答案