java - 如何为RecyclerView设置BaseAdapter?

标签 java android android-recyclerview baseadapter

每当我需要实现自定义 ListViewGridView 时。我总是使用这样的 BaseAdapter 类:

public class CustomFlowerGridViewAdapter extends BaseAdapter {

private HashMap<String, String> mFlowerFeed = new HashMap<>();

private Context mContext;
static LayoutInflater mFlowerInflater = null;

CustomFlowerGridViewAdapter(Context context, ArrayList<HashMap<String, String>> data) {

    super();
    this.mContext = context;
    MainActivity.flowerArrayFeedList = data;
    mFlowerInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

@Override
public int getCount() {
    return MainActivity.flowerArrayFeedList.size();
}

@Override
public Object getItem(int i) {
    return MainActivity.flowerArrayFeedList.size();
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

    final ViewHolder holder;

    if(view == null){

        view = mFlowerInflater.inflate(R.layout.flower_grid_row, viewGroup, false);

        holder = new ViewHolder();

        holder.name = (TextView) view.findViewById(R.id.mainGridName);

        view.setTag(holder);
        mFlowerFeed = MainActivity.flowerArrayFeedList.get(i);
        mFlowerImage = MainActivity.flowerArrayImageList.get(i);

    }
    else{
        holder = (ViewHolder) view.getTag();
        mFlowerFeed = MainActivity.flowerArrayFeedList.get(i);
        mFlowerImage = MainActivity.flowerArrayImageList.get(i);

    }

    holder.name.setText(mFlowerFeed.get("name"));

    return view;
}

private class ViewHolder {

    TextView name

 }
}

但是,现在我正在尝试实现一个水平ListView。经过一些研究,我发现实现 Horizo​​ntal ListView 的“正确”方法是使用 RecyclerView。这就是我的 MainActivity

中的内容
CustomFlowerGridViewAdapter customFlowerGridViewAdapter = new CustomFlowerGridViewAdapter(MainActivity.this, flowerArrayFeedList);
    flowersGrid.setAdapter(customFlowerGridViewAdapter);

问题出在我尝试设置适配器时。

enter image description here

如何将 BaseAdapter 设置为 RecyclerView?

最佳答案

你不知道。 RecylerViews 接受另一种适配器,与 ListView 中的适配器不同。带有字符串列表的适配器的简单示例:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

   public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        TextView v = (TextView) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.my_text_view, parent, false);
        ...
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }


    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.mTextView.setText(mDataset[position]);

    }


    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

这个可以在 docs 中找到。因此,您需要实现一个您的适配器将使用的 ViewHolder 类。您的适配器需要扩展 RecyclerView.Adapter。

要将列表设置为水平,您需要在回收器 View 中设置 LinearLayourManager 并设置 Horizo​​ntal 属性。

LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(layoutManager);
MyAdapter adapter = new MyAdapter(dataset);
recyclerView.setAdapter(adapter);

关于java - 如何为RecyclerView设置BaseAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50686600/

相关文章:

Android 抽屉导航 : How to change actionBarMenu according to drawer list item select

android - 如何在 FirestoreRecyclerAdapter 中添加 2 个不同的查询?

android - 改造 - 如何在异步请求中发出同步请求

java - 如何配置邮件服务器以与 JavaMail 一起使用?

java - 如何知道从url下载的文件是否不完整?

android - 如何在按钮单击时打开布局(android)

Android:ListView性能还是不够怎么办?

java - 适配器不更新和更改 recyclerview,notifyDataSetChanged 不工作

java - 带有 jdbc 领域的可移植安全角色映射

java - 尝试启动 Astana 3 时出现 JVM 错误