首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将BaseAdapter设置为RecyclerView?

如何将BaseAdapter设置为RecyclerView?
EN

Stack Overflow用户
提问于 2018-06-04 18:22:13
回答 4查看 5.2K关注 0票数 1

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

代码语言:javascript
复制
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

 }
}

但是,现在我正在尝试实现一个Horizontal ListView。在做了一些研究之后,我发现实现水平ListView的“正确”方法是使用RecyclerView。这就是我的MainActivity

代码语言:javascript
复制
CustomFlowerGridViewAdapter customFlowerGridViewAdapter = new CustomFlowerGridViewAdapter(MainActivity.this, flowerArrayFeedList);
    flowersGrid.setAdapter(customFlowerGridViewAdapter);

问题是当我尝试设置适配器时。

如何将BaseAdapter设置为RecyclerView?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-04 18:33:51

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

代码语言:javascript
复制
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;
    }
}

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

若要将列表设置为水平列表,您需要在回收器视图中设置一个具有水平属性集的LinearLayourManager。

代码语言:javascript
复制
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(layoutManager);
MyAdapter adapter = new MyAdapter(dataset);
recyclerView.setAdapter(adapter);
票数 5
EN

Stack Overflow用户

发布于 2018-06-04 18:30:27

您的CustomFlowerGridViewAdapter需要扩展RecyclerView.Adapter。您还需要很好地更改适配器中的一些方法。使用RecyclerView,作为网格的布局将由一个可以设置在适配器外部的GridLayoutManager控制。

票数 0
EN

Stack Overflow用户

发布于 2018-06-04 19:03:13

我找到了一个很简单的解决方案。不需要处理RecyclerViews

旋转布局包装

然后,在包装器内,指定角度为90。

代码语言:javascript
复制
com.github.rongi.rotate_layout.layout.RotateLayout
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/mainFlowersGridL"
            android:layout_below="@+id/mainFlowersHeading"
            android:layout_width="match_parent"
            android:layout_height="170dp"
            app:angle="90"> <!-- Specify rotate angle here -->

            <GridView
                android:id="@+id/mainFlowersGrid"
                android:layout_below="@+id/mainFlowersHeading"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

            </GridView>
        </com.github.rongi.rotate_layout.layout.RotateLayout>

然后,在自定义元素xml文件中。将布局指定为-90。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50686600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档