首页 文章

在为RecyclerView创建适配器后,未经检查的分配警告

提问于
浏览
-1

为我的 RecyclerView 创建适配器后,我注意到了一个警告 . 如何解决这个警告?

(List) results.valuesmyList.addAll((List) results.values); 中返回警告:

未选中的赋值:'java.util.List'到'java.util.Collection <?扩展com.companyname.appname.Product>'

'Product' class

public class Product {
    public Product(){}

    private String mProductName;
    private String mProductDescription;

    public Product(String productName, String productDescription) {
        this.mProductName = productName;
        this.mProductDescription = productDescription;
    }

    public String getProductName() {
        return mProductName;
    }

    public void setProductName(String item){
        this.mProductName = item;
    }

    public String getProductDescription() {
        return mProductDescription;
    }

    public void setProductDescription(String description){
        this.mProductDescription = description;
    }
}

Activity class

public class MyActivity extends AppCompatActivity {
    private static final String TAG = MyActivity.class.getSimpleName();

    private Boolean mCurrentValue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.md);
    }    

    @Override
    protected void onStart() {
        super.onStart();
        setContentView(R.layout.md);
    }
}

Fragment class

public class MyFragment extends Fragment {

    public MyFragment() {}

    private MyListAdapter mAdapter;

    RecyclerView mRecyclerView;

    public boolean mTwoPane;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_main, container, false);
        mTwoPane = Objects.requireNonNull(getActivity()).findViewById(R.id.detail_container) != null;

        mRecyclerView = view.findViewById(R.id.recyclerView_list);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));
        mRecyclerView.addItemDecoration(new DividerItemDecoration(Objects.requireNonNull(getContext()), LinearLayout.VERTICAL));

        ArrayList<Product> myList = new ArrayList<>();

        String[] items = getResources().getStringArray(R.array.product_names);
        String[] itemDescriptions = getResources().getStringArray(R.array.product_descriptions);
        for (int n = 0; n < items.length; n++){
            Product product = new Product();
            product.setProductName(items[n]);
            product.setFareZone(itemDescriptions[n]);
            myList.add(product);
        }

        mAdapter = new MyListAdapter(getActivity(), myList, mTwoPane);

        mRecyclerView.setAdapter(mAdapter);

        return view;
    }
}

Adapter class

public class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.ProductViewHolder> implements Filterable {
    private Context mCtx;
    private List<Product> myList;
    private List<Product> myListFull;
    private boolean mTwoPane;

    class ProductViewHolder extends RecyclerView.ViewHolder {
        RelativeLayout relativeLayout;
        TextView textviewTitle, textviewSubtitle;

        ProductViewHolder(View itemView) {
            super(itemView);

            relativeLayout = itemView.findViewById(R.id.listitem_dualline_relativelayout);
            textviewTitle = itemView.findViewById(R.id.listitem_dualline_title);
            textviewSubtitle = itemView.findViewById(R.id.listitem_dualline_subtitle);
        }
    }

    public MyListAdapter(Context mCtx, List<Product> myList, boolean mTwoPane) {
        this.mCtx = mCtx;
        this.myList = myList;
        this.mTwoPane = mTwoPane;
        myListFull = new ArrayList<>(myList);
    }

    @NonNull
    @Override
    public MyListAdapter.ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mCtx);
        View v = inflater.inflate(R.layout.listitem_dualline, parent,false);
        return new MyListAdapter.ProductViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull final MyListAdapter.ProductViewHolder holder, final int position) {
        Log.d(TAG, "onBindViewHolder: called.");

        final Product product = myList.get(holder.getAdapterPosition());

        holder.textviewTitle.setText(product.getProductName());
        holder.textviewSubtitle.setText(product.getProductDescription());
    }

    @Override
    public int getItemCount() {
        return myList.size();
    }

    @Override
    public Filter getFilter() {
        return exampleFilter;
    }

    private Filter exampleFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            List<Product> filteredList = new ArrayList<>();

            if (constraint == null || constraint.length() == 0) {
                filteredList.addAll(myListFull);
            } else {
                String filterPattern = constraint.toString().toLowerCase().trim();

                for (Product item : myListFull) {
                    if (item.getProductName().toLowerCase().contains(filterPattern)) {
                        filteredList.add(item);
                    }
                }
            }

            FilterResults results = new FilterResults();
            results.values = filteredList;

            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            myList.clear();
            myList.addAll((List) results.values);
            notifyDataSetChanged();
        }
    };
}

1 回答

  • 1

    更换:

    myList.addAll((List) results.values);
    

    有:

    myList.addAll((List<Product>) results.values);
    

相关问题