简体   繁体   English

Recyclerview中的ViewPager

[英]ViewPager inside a recyclerview

Before marking this as a duplicate i have tried all the solutions but nothing worked. 在将其标记为重复之前,我尝试了所有解决方案,但没有任何效果。 Please go through the question and help me. 请解决问题并帮助我。

I have a recycler view that will have multiple viewPagers and both will scroll individually. 我有一个回收站视图,该视图将有多个viewPagers,并且两者都将单独滚动。 I cant seem to implement this. 我似乎无法实现这一目标。 My Code is as follows 我的代码如下

RecyclerView Adapter RecyclerView适配器

    public class Adapter extends RecyclerView.Adapter<Adapter.holder> {


    private final LayoutInflater mLayoutInflater;
    private final Context context;
    private final RecyclerView r;

    private OnLoadMoreListener onLoadMoreListener;

    ArrayList<ceo> mArray = new ArrayList<>();
    private int heightPixels;
    private int widthPixels;
    MainActivity contextActivity;
    public holder mh;


    public Adapter(Context mContext, final RecyclerView r,MainActivity conts) {

        contextActivity=conts;



        this.r=r;
        context = mContext;
        mLayoutInflater = LayoutInflater.from(mContext);
        r.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                if (!r.canScrollVertically(1)) {
                    onLoadMoreListener.onLoadMore();
                }
            }
        });
    }

    public void setmArray(ArrayList<ceo> mArray) {
        this.mArray = mArray;

        Log.e("This->", mArray.toString());
        notifyItemRangeChanged(0, mArray.size());

    }

    @Override
    public holder onCreateViewHolder(ViewGroup viewGroup, int i) {

        View v = mLayoutInflater.inflate(R.layout.recycler_custom_photo,viewGroup, false);
        mh = new Adapter.holder(v);
        return mh;
    }
    public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
        this.onLoadMoreListener = onLoadMoreListener;
    }





    @Override
    public void onBindViewHolder(holder holder, int i) {

        ViewPagerAdapter mp = new ViewPagerAdapter(context,mArray);
        holder.vp.setAdapter(mp);


     }





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

    class holder extends RecyclerView.ViewHolder {



        ViewPager vp;
        public holder(View itemView) {
            super(itemView);
           vp=(ViewPager)itemView.findViewById(R.id.pager);

        }
         }
           }

View Pager Adapter 查看寻呼机适配器

    public class ViewPagerAdapter extends PagerAdapter {

    ArrayList<ceo> alias=null;
    private boolean tk=true;
    Context mcov;

    public ViewPager(Context context,ArrayList<ceo> checkAlias) {

        mcov=context;
        this.alias=checkAlias;
    }

    @Override
    public int getCount() {

        Log.e("Sze",alias.size()+"");
        return alias.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view ==  object;
    }

    public void setNestedIndic(boolean token)
    {
      tk=token;
    }
    public Bitmap decodeFile(File f) {

        try {
            //Decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f), null, o);

            //The new size we want to scale to
            final int REQUIRED_SIZE = 290;

            //Find the correct scale value. It should be the power of 2.
            int scale = 1;
            while (o.outWidth / scale / 2 >= REQUIRED_SIZE && o.outHeight / scale / 2 >= REQUIRED_SIZE)
                scale *= 2;

            //Decode with inSampleSize
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
        } catch (FileNotFoundException e) {
        }
        return null;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {


        LayoutInflater mlAy = (LayoutInflater) mcov
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View m=mlAy.inflate(R.layout.custom_photo, container, false);
        ImageView mimg=(ImageView)m.findViewById(R.id.mainImageFeed);
        TextView tc=(TextView)m.findViewById(R.id.texr);
            String path=alias.get(position).getPath();


        Log.e("Pos",""+position);
        tc.setText(position+" ");

      container.addView(m);
       return  m;
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // Remove viewpager_item.xml from ViewPager
        ((android.support.v4.view.ViewPager) container).removeView((RelativeLayout) object);

    }
    }

recycler_custom_photo.xml recycler_custom_photo.xml

    <?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" >
    <android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

     </RelativeLayout>

custom_photo.xml custom_photo.xml

      <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:background="#313131"
    android:id="@+id/taken"
    android:layout_height="wrap_content">
    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/old"
        android:id="@+id/mainImageFeed"
        android:layout_centerVertical="true"
        android:adjustViewBounds="true"
       />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/texr"
        android:textSize="40dp"
        />

   </RelativeLayout>

What changes do i need to make to make these work? 为了使这些工作有效,我需要进行哪些更改? Thank You for answering! 感谢您的回答!

The code was fine. 代码很好。 The thing i missed out was adding a specific height to the viewpager inside the recyclerview. 我错过的事情是在recyclerview内的viewpager中增加了特定的高度。 Also i instantiated the LayoutInflater in the constructor of the PagerAdapter and not instantiateItem. 我也实例化了PagerAdapter的构造函数中的LayoutInflater,而不是实例化了Item。 Hope this helps someone in the future! 希望这对以后的人有所帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在片段里面的Recyclerview在viewpager里面 - Recyclerview in fragment inside a viewpager ViewPager中的Espresso RecyclerView - Espresso RecyclerView inside ViewPager 另一个 RecyclerView 内的 ViewPager 内的 RecyclerView 不滚动 - RecyclerView inside a ViewPager inside another RecyclerView not scrolling NestedScrollView 中的 ViewPager 中的 RecyclerView - 效果不佳 - RecyclerView inside ViewPager inside NestedScrollView - doesn't work well 共享元素从viewpager内的fragment recyclerview过渡到新活动? - Shared element transition from fragment recyclerview inside viewpager to new activity? 从DialogFragment更新活动的ViewPager内的片段RecyclerView的数据 - Update Data Of RecyclerView Of Fragment Inside ViewPager Of Activity From DialogFragment 如何修复垂直 RecyclerView 内的水平 ViewPager2 和 RecyclerView 的滚动问题? - How to fix Scrolling issue of horizontal ViewPager2 and RecyclerView that are inside a vertical RecyclerView? 在CoordinatorLayout中使用RecyclerView和ViewPager - Use RecyclerView and ViewPager in CoordinatorLayout ViewPager中RecyclerView的OnItemClickListener - OnItemClickListener for RecyclerView in ViewPager ViewPager中的RecyclerView无法正常工作 - RecyclerView within ViewPager not working
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM