当前位置: 首页 > 知识库问答 >
问题:

未选中对作为原始类型ListAdapter成员的submitList(List)的调用

百里朝
2023-03-14

我一直在复制向日葵android架构最佳实践应用程序,到目前为止速度很慢但很成功,虽然我的代码正常工作,但它显示了一条未经检查的消息,所以我运行了它要求的命令,它说:

[unchecked]未选中对作为原始类型ListAdapter成员的submitList(List)的调用,其中T是类型变量:T扩展类ListAdapper中声明的对象

这可能是不重要的,但它是烦人的我,一个我用作参考从来没有任何

我的片段:

public class NewsFeedFragment extends Fragment {

    private PinViewModel viewModel;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        FragmentNewsFeedBinding binding = FragmentNewsFeedBinding.inflate(inflater, container, false);
        PinViewModelFactory factory = InjectorUtils.providePinListViewModelFactory(getContext());
        ListAdapter adapter = new PinListAdapter();
        binding.pinList.setAdapter(adapter);
        this.viewModel = ViewModelProviders.of(this, factory).get(PinViewModel.class);
        subscribeUi(adapter);
        return binding.getRoot();
    }

    private void subscribeUi(ListAdapter adapter) {
        this.viewModel.pins.observe(getViewLifecycleOwner(), pins -> {
            if (pins != null) {
                adapter.submitList(pins);
            }
        });
    }
}

我的视图模型:

public class PinViewModel extends ViewModel {

    private PinRepository pinRepository;

    public LiveData<List<Pin>> pins;

    PinViewModel(@NonNull PinRepository pinRepository) {
        this.pinRepository = pinRepository;
        this.pins = this.pinRepository.getPins();
    }
}

我的适配器:

public class PinListAdapter extends ListAdapter<Pin, PinListAdapter.ViewHolder>{

    public PinListAdapter() {
        super(new PinDiffCallback());
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ViewHolder(ListItemPinBinding.inflate(
                LayoutInflater.from(parent.getContext()), parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Pin pin = getItem(position);
        holder.bind(pin);
        holder.itemView.setTag(pin);
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        private ListItemPinBinding binding;

        ViewHolder(@NonNull ListItemPinBinding binding) {
            super(binding.getRoot());
            this.binding = binding;
        }

        void bind(Pin item) {
            binding.setPin(item);
            binding.executePendingBindings();
        }
    }

    static class PinDiffCallback extends DiffUtil.ItemCallback<Pin> {

        @Override
        public boolean areItemsTheSame(@NonNull Pin oldItem, @NonNull Pin newItem) {
            return oldItem.getId() == (newItem.getId());
        }

        @Override
        public boolean areContentsTheSame(@NonNull Pin oldItem, @NonNull Pin newItem) {
            return oldItem == newItem;
        }
    }
}

共有2个答案

邵城
2023-03-14

这个例子是用Kotlin而不是Java编写的...

尚不清楚什么列表

if (pins != null && pins instanceof List<Pin>) {
    adapter.submitList(pins);
}

陆浩博
2023-03-14

你在使用

ListAdapter adapter = new PinListAdapter();

这就是扔掉类型信息PinListAdapter。具体来说,ListAdapter

您可以将适配器更改为<code>PinListAdapter</code>并获得所需的类型信息。

 类似资料:
  • 我正在关注Udacity上的Google Android教程,但在指定的代码中,我收到以下警告: 对“execute”的未检查调用(参数...)”作为原始类型“android.os.AsyncTask”的成员 关于此代码: 做某事任务: 任何人都可以解释这个警告以及如何解决它?它似乎应该按照说明工作...

  • 我正在Netbeans IDE 8.2中制作一个商店,由于这个错误,我无法编译。我试着通过添加JComboBox来修复它,但是它没有解决我的问题。这个应用程序的网页版运行良好,但我无法编译它。当使用Xlint:Unchecked运行时,这是一个警告:[unchecked]作为原始类型JComboBox list.addItem(s)的成员对addItem(E)的未检查调用;其中E是一个类型变量:E

  • 问题内容: 使用泛型时,我发现了一个奇怪的行为。 在此类中,该成员与以下内容无关: 该类在main中使用: 编译错误为“类型不兼容。必需:找到的字符串:对象”。 似乎Java忘记了使用原始类型时的type参数。 我的Java版本是1.7.0_21 问题答案: 简而言之,由于是原始的,它的非静态成员也变为原始的。 JLS§4.8中对此进行了概述: 更准确地说,原始类型定义为以下之一: 通过采用通用类

  • 问题内容: 即使我们有一个整数对象(例如Integer),为什么整数(int)仍具有原始类型?但是对于String类型则不一样。String没有这种原始类型。始终使用String处理对象引用吗? 问题答案: 速度。对于机器代码而言,使用本机CPU指令添加两个int的速度要快得多,而不是必须获取两个Integer对象,从它们中提取int值然后相加的结果,从而创建一个新的结果Integer对象以包含结

  • 我有这样一种方法,将结果强制转换到(列表),但我的eclipse仍然在抱怨!类型安全:未选中从列表到列表的强制转换

  • 我正在学习Spring,我只是在玩豆子范围。 我将附上代码,然后描述我想做的事情。 到目前为止,我已经创建了一个 点类别: 我创建了一个三角形类,其中有3个Point类的实例: 以下是spring.xml: 这是主类: 所以,你会看到三个豆子的豆范围,,和是,但它们是的成员,其范围默认为Spring 因此,我的假设是,这应该不起作用,除非我能以某种方式在我的< code>Triangle类中获取<