2015-08-12 28 views
9

RecyclerView içinde ilk öğe olarak ViewPager var. FragmentStatePagerAdapteronBindViewHolder() yönteminin içine viewpager ayarlamak istiyorum. Ama getsupportfragmentmanager()'u arayamıyorum. Lütfen yardım !! Eğer yapıcı adaptöre bağlamı geçmek zorundaadaptör sınıfından getsupportfragmentmanager() nasıl çağırılır?

public class CustomListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    private Context context; 
    private List<RowItem> rowItemList; 
    private final int VIEW_TYPE_CUSTOM = 0; 
    private final int VIEW_TYPE_NORMAL = 1; 
    NewPagerAdapter mCustomPagerAdapter; 

    public CustomListAdapter(Context context, List<RowItem> rowItemList) { 
     this.context = context; 
     this.rowItemList = rowItemList; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (position == 0) 
      return VIEW_TYPE_CUSTOM; 
     else 
      return VIEW_TYPE_NORMAL; 
    } 

    @Override 
    public int getItemCount() { 
     return rowItemList.size()+1; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     switch (getItemViewType(position)) { 
      case VIEW_TYPE_CUSTOM: 
       recViewHolder1 viewHolderSecond = (recViewHolder1) holder; 
        mCustomPagerAdapter = new NewPagerAdapter(getSupportFragmentManager()); 
        viewHolderSecond.vPager.setAdapter(mCustomPagerAdapter); 
       break; 
      case VIEW_TYPE_NORMAL: 
       recViewHolder2 viewHolderFirst = (recViewHolder2) holder; 
       RowItem rowItem = rowItemList.get(position-1); 
       viewHolderFirst.vName.setText(rowItem.getName()); 
       viewHolderFirst.vImage.setImageResource(rowItem.getImageId()); 
       break; 

     } 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     switch (viewType) { 
      case VIEW_TYPE_CUSTOM: 
       View itemView = LayoutInflater. 
         from(parent.getContext()). 
         inflate(R.layout.pagerlayout, parent, false); 
       return new recViewHolder1(itemView); 
      case VIEW_TYPE_NORMAL: 
       View itemView1 = LayoutInflater. 
         from(parent.getContext()). 
         inflate(R.layout.rowlayout, parent, false); 
       return new recViewHolder2(itemView1); 
     } 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return super.getItemId(position); 
    } 


    public static class recViewHolder1 extends RecyclerView.ViewHolder { 
     protected static ViewPager vPager; 


     public recViewHolder1(View v) { 
      super(v); 
      vPager = (ViewPager) v.findViewById(R.id.vPager); 
     } 
    } 

    public class recViewHolder2 extends RecyclerView.ViewHolder implements View.OnClickListener { 
     protected TextView vName; 
     protected ImageView vImage; 

     public recViewHolder2(View v) { 
      super(v); 
      v.setOnClickListener(this); 
      vName = (TextView) v.findViewById(R.id.vName); 
      vImage = (ImageView) v.findViewById(R.id.vImage); 
     } } } 
+0

/Fragment –

cevap

3

İlk: İşte benim kod.

O zaman bu bağlam başvurusunu getSupportFragmentManager almak için kullanmanız gerekir.

mCustomPagerAdapter = new NewPagerAdapter(context.getSupportFragmentManager()); 
viewHolderSecond.vPager.setAdapter(mCustomPagerAdapter); 
+0

i bu seçeneği çalıştı. Ama işe yaramadı. – Nabin

+0

@Nabin bir çözüm bulamadı mı? – Burkely91

38

i mContext

İşte
((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction() 
          .replace(R.id.item_detail_container, fragment) 
          .commit(); 
+0

Bu teklifle çalışma zamanı hatası alıyorum MainActivity, android.support.v4.app.FragmentActivity –

+0

Dönüştürülemez türlere dönüştürülemiyor. –

6

Geçişi ayarlayabilirsiniz döküm bunu çözmüş;

public void pushFragment(Fragment newFragment, Context context){ 

    FragmentTransaction transaction = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.fragment, newFragment); 
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    transaction.addToBackStack(null); 
    transaction.commit(); 

} 
0

Başka bir çözüm ...)

Declare bağlamı

private Toast mssgeToast; 

private Context ctxContext; 

public MyViewListener(myView pView){ 

    this.mView = pView; 
    this.ctxContext = pView.getContext(); 

} 

Sonraki ...

public void pushFragment(Context context){ 
    FragmentManager fm = ((FragmentActivity)context).getSupportFragmentManager(); 
    PopupClickFragment pcf = new PopupClickFragment(); 

    pcf.show(fm, ""); 
    // FragmentTransaction transaction = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction(); 

} 

ve OnClickListener içine beyan ederim. Örnek:

Sen Etkinliğinizden adaptöre yapıcısındaki geçmek gerekir
@Override 
    public void onCellClicked (@NonNull RecyclerView.ViewHolder p_jCellView,int p_nXPosition, 
    int p_nYPosition){ 
     //TODO: AQUI SE DEBE LEVANTAR EL POPUP INSTANCIANDO .SHOW(); 

     pushFragment(ctxContext); 
    } 
İlgili konular