2016-12-07 3 views
1

Прежде чем отмечать это как дубликат, я пробовал все решения, но ничего не работало. Пожалуйста, рассмотрите вопрос и помогите мне.ViewPager внутри recyclerview

У меня есть просмотр recycler, который будет иметь несколько viewPagers, и оба будут прокручиваться индивидуально. Кажется, я не могу это реализовать. Мой код выглядит следующим образом

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); 

     } 
     } 
      } 

Просмотр пейджера Адаптер

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

<?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

 <?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> 

Какие изменения мне нужно сделать, чтобы сделать эти работы? Спасибо, что ответили!

ответ

2

Код был в порядке. Вещь, которую я пропустил, добавила определенную высоту в viewpager внутри recyclerview. Также я создал экземпляр LayoutInflater в конструкторе PagerAdapter, а не instantiateItem. Надеюсь, это поможет кому-то в будущем!

+0

Пожалуйста, отметьте свой ответ как «Принято», чтобы он не отображался в списке «Без ответа». – Mangesh

+0

1 День, чтобы бросить! –

Смежные вопросы