如何在一个活动中实现2个或更多的recyIclerview [英] How to implement 2 or more recyIclerview in an activity

查看:67
本文介绍了如何在一个活动中实现2个或更多的recyIclerview的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在一个活动中实现2个或更多的recyIclerview? 我正在尝试在我的活动中实施2个或更多的recyclerview

How to implement 2 or more recyIclerview in an activity ? I am trying to implement 2 or more recyclerview in my activity

在此代码行中,我声明了第一个适配器

in this code line I am declaring the first adapter

private RecyclerView.Adapter mAdapter;

如何声明我的第二个适配器?

how to declare my second adapter?

顺便说一下,使用以下代码运行我的应用程序时,recyclerview不会滚动并正确显示

by the way while running my app with the below code , the recyclerview is not scrolling and displaying correcly

主要活动

 private RecyclerView mRecyclerView;
    private RecyclerView mRecyclerView1;

    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    private static String LOG_TAG = "RecyclerViewActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler_view);
//first recycler
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
        mRecyclerView.setHasFixedSize(true);
       // LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
        mLayoutManager = new 

    LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false);
            mRecyclerView.setLayoutManager(mLayoutManager);
            mAdapter = new MyAdapter(getDataSet());
            mRecyclerView.setAdapter(mAdapter);
            RecyclerView.ItemDecoration itemDecoration =
                    new DividerItemDecoration(this, LinearLayoutManager.VERTICAL);
            mRecyclerView.addItemDecoration(itemDecoration);
    //second recycler
            mRecyclerView1 = (RecyclerView) findViewById(R.id.my_recycler_view1);
            mRecyclerView1.setHasFixedSize(true);
             LinearLayoutManager mLayoutManager1 = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
            mRecyclerView1.setLayoutManager(mLayoutManager1);
           // mAdapter1 = new MyAdapter1(getDataSet1());
            mRecyclerView1.setAdapter(mAdapter1);

myadapter

myadapter

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

    public class ImageViewHolder extends RecyclerView.ViewHolder {
        //ImageView mImage;
        public TextView txtHeader;
        public TextView txtFooter;
        public ImageViewHolder(View itemView) {
            super (itemView);
            txtHeader = (TextView) itemView.findViewById(R.id.firstLine);
            txtFooter = (TextView) itemView.findViewById(R.id.secondLine);
        }
    }



    public void add(int position, String item) {
        mDataset.add(position, item);
        notifyItemInserted(position);
    }

    public void remove(String item) {
        int position = mDataset.indexOf(item);
        mDataset.remove(position);
        notifyItemRemoved(position);
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(ArrayList<String> myDataset) {
        mDataset = myDataset;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder(ViewGroup parent,
                                                       int viewType) {

            // create a new view
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout, parent, false);
            // set the view's size, margins, paddings and layout parameters
            ImageViewHolder vh = new ImageViewHolder(v);
            return vh;
        }


    private static final int TYPE_IMAGE = 1;
    private static final int TYPE_GROUP = 2;

    @Override
    public int getItemViewType(int position) {
        // here your custom logic to choose the view type
        return position;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder TextViewHolder, int position) {


                ImageViewHolder viewHolder = (ImageViewHolder) TextViewHolder;
                //  viewHolder.txtHeader.setText(...)
                final String name = mDataset.get(position);
                viewHolder.txtHeader.setText(mDataset.get(position));
                viewHolder.txtFooter.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        remove(name);
                    }
                });

               // viewHolder.txtFooter.setText("Footer: " + mDataset.get(position));

        }


    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.size();
    }

}

我的adpater1

my adpater1

公共类MyAdapter1扩展了RecyclerView.Adapter { 私有ArrayList mDataset;

public class MyAdapter1 extends RecyclerView.Adapter { private ArrayList mDataset;

public class ImageViewHolder extends RecyclerView.ViewHolder {
    //ImageView mImage;
    public TextView txtHeader;
    public TextView txtFooter;
    public ImageViewHolder(View itemView) {
        super (itemView);
        txtHeader = (TextView) itemView.findViewById(R.id.firstLine);
        txtFooter = (TextView) itemView.findViewById(R.id.secondLine);
    }
}



public void add(int position, String item) {
    mDataset.add(position, item);
    notifyItemInserted(position);
}

public void remove(String item) {
    int position = mDataset.indexOf(item);
    mDataset.remove(position);
    notifyItemRemoved(position);
}

// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter1(ArrayList<String> myDataset) {
    mDataset = myDataset;
}

// Create new views (invoked by the layout manager)
@Override
public RecyclerView.ViewHolder  onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {

    // create a new view
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout1, parent, false);
    // set the view's size, margins, paddings and layout parameters
    ImageViewHolder vh = new ImageViewHolder(v);
    return vh;
}


private static final int TYPE_IMAGE = 1;
private static final int TYPE_GROUP = 2;

@Override
public int getItemViewType(int position) {
    // here your custom logic to choose the view type
    return position;
}

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(RecyclerView.ViewHolder TextViewHolder, int position) {


    ImageViewHolder viewHolder = (ImageViewHolder) TextViewHolder;
    //  viewHolder.txtHeader.setText(...)
    final String name = mDataset.get(position);
    viewHolder.txtHeader.setText(mDataset.get(position));
    viewHolder.txtFooter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            remove(name);
        }
    });

    // viewHolder.txtFooter.setText("Footer: " + mDataset.get(position));

}


// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
    return mDataset.size();
}

主要活动布局

    <TextView
        android:id="@+id/textView"
        android:layout_width="150dp"
        android:layout_height="30dp"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:layout_alignParentTop="true"
        android:paddingTop="5dp"
        android:text="Recomanded for you"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="400dp"
        android:layout_height="180dp"
        android:layout_below="@id/textView"
        android:scrollbars="vertical" />


    <TextView
        android:id="@+id/textView1"
        android:layout_width="150dp"
        android:layout_height="30dp"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:layout_alignParentTop="true"
        android:paddingTop="5dp"
        android:layout_below="@id/my_recycler_view"
        android:text=" for you"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view1"
        android:layout_width="400dp"
        android:layout_height="180dp"
        android:layout_below="@id/textView1"
        android:scrollbars="vertical" />
</RelativeLayout>

推荐答案

由于适配器中的代码完全相同,因此无需声明两个不同的类.您可以只使用一个类并从中创建两个不同的实例,然后将正确的数据集传递给每个实例,以在RecyclerView中呈现.

Since code in your adapters is exactly the same, you don't need to declare two different classes. You can use just one class and create two different instances from it, passing to each instance the right set of data to render in the RecyclerView.

希望这可以帮助您

private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;

private RecyclerView mRecyclerView1;
private RecyclerView.Adapter mAdapter1;

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

    //first recycler
    mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(
        new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false));
    mAdapter = new MyAdapter(getDataSet());
    mRecyclerView.setAdapter(mAdapter);

    //second recycler
    mRecyclerView1 = (RecyclerView) findViewById(R.id.my_recycler_view1);
    mRecyclerView1.setHasFixedSize(true);
    mRecyclerView1.setLayoutManager(
        new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false));
    mAdapter1 = new MyAdapter(getDataSet1());
    mRecyclerView1.setAdapter(mAdapter1);

    // ...
}

这篇关于如何在一个活动中实现2个或更多的recyIclerview的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆