2016-12-07 14 views
1

Bevor ich dies als ein Duplikat markiert habe, habe ich alle Lösungen ausprobiert, aber nichts hat funktioniert. Bitte gehen Sie die Frage durch und helfen Sie mir.ViewPager in einem Recyclerview

Ich habe eine Recycler-Ansicht, die mehrere viewPagers haben wird und beide werden einzeln scrollen. Ich kann das anscheinend nicht umsetzen. Mein Code ist wie folgt

RecyclerView Adapter

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

     } 
     } 
      } 

Ansicht 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

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

Welche Veränderungen muss ich diese Arbeit zu machen machen? Danke für die Antwort!

Antwort

2

Der Code war in Ordnung. Das Ding, das ich verpasste, war das Hinzufügen einer bestimmten Höhe zum Viewpager in der Recycleransicht. Außerdem habe ich das LayoutInFlater im Konstruktor des PagerAdapters instanziiert und nicht instantiateItem. Hoffe das hilft jemandem in der Zukunft!

+0

Bitte markieren Sie Ihre Antwort als "Akzeptiert", damit sie nicht in der Liste "Unbeantwortete" erscheint. – Mangesh

+0

1 Tag zu gehen, Bruder! –

Verwandte Themen