Wie offenes Fragment von RecyclerView.Adapter <CardAdapter.ViewHolder>

1.TabLayout

- tab1 (Fragment1) - tab2 (Fragment2) - tab3 (Fragment3) * RecyclerView + CardView (OnClick) 

Auf CardView ClickListner ein weiteres Fragment in tab3. So wie man Fragment in tab3 öffnen

Fehler ist in getFragmentManager() :

 FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

Stattdessen habe ich versucht:

 FragmentTransaction transaction = activity.getFragmentManager().beginTransaction(); FragmentTransaction transaction = itemview.getContext().getFragmentManager().beginTransaction(); 

Aber Fehler ist nicht gelöst.

Hier ist mein Code:

  public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> { List<NatureItem> mItems; private int lastPosition = -1; Context context; TaskFragment main; public CardAdapter(Context context,TaskFragment ma) { this.context=context; main=ma; } public CardAdapter() { super(); mItems = new ArrayList<NatureItem>(); NatureItem nature = new NatureItem(); nature.setName("The Paris Attack 2015"); nature.setDes("Lorem ipsum dolor sit amet."); nature.setThumbnail(R.drawable.news1); mItems.add(nature); } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) { View v = LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.custom_list, viewGroup, false); ViewHolder viewHolder = new ViewHolder(v); return viewHolder; } @Override public void onBindViewHolder(ViewHolder viewHolder, int i) { NatureItem nature = mItems.get(i); viewHolder.tvNature.setText(nature.getName()); viewHolder.tvDesNature.setText(nature.getDes()); viewHolder.imgThumbnail.setImageResource(nature.getThumbnail()); // setAnimation(viewHolder.card,i); } @Override public int getItemCount() { return mItems.size(); } class ViewHolder extends RecyclerView.ViewHolder { private int lastPosition = -1; public ImageView imgThumbnail; public TextView tvNature; public TextView tvDesNature; // Button btnclear,btncancle; CardView card; Activity activity; Context co; public ViewHolder(final View itemView) { super(itemView); imgThumbnail = (ImageView) itemView.findViewById(R.id.img_thumbnail); tvNature = (TextView) itemView.findViewById(R.id.tv_nature); tvDesNature = (TextView) itemView.findViewById(R.id.tv_des_nature); card = (CardView) itemView.findViewById(R.id.card); card.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(itemView.getContext(), "Clicked Card...", Toast.LENGTH_LONG).show(); ShareFragment newFragment = new ShareFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.viewFragments, newFragment); transaction.addToBackStack(null); transaction.commit(); } }); } } } 

  • Wie implementiere ich Folie, um Aktionen in recyclerview zu zeigen?
  • Android - java.lang.IndexOutOfBoundsException: Ungültige Position Position 0 (0). Artikelanzahl: 0
  • RecyclerView - erhalten Sie alle vorhandenen Ansichten / Viewholder
  • NotifyDataSetChanged- RecyclerView -Ist es einen asynchronen Anruf?
  • Wie kann ich ItemDecoration richtig zeichnen, wenn das RecyclerView-Element seine Höhe animiert?
  • Das Ändern der Farbe von Single Drawable in RecyclerView ändert alle Drawables
  • ViewPager Swipe funktioniert nicht mit RecyclerView
  • Was ist besser? NotifyDataSetChanged oder notifyItemChanged in loop?
  • 3 Solutions collect form web for “Wie offenes Fragment von RecyclerView.Adapter <CardAdapter.ViewHolder>”

    Problem :

     Error:cannot find symbol method getSupportFragmentManager() 

    Lösung:

    Wenn Sie adapter Kontext verwenden, dann für den Zugriff Fragment-Manager müssen Sie Ihren context zu werfen. Also solltest du diesen Weg benutzen.

     YourParentActivity myActivity = (YourParentActivity)context 

    Jetzt können Sie auf Methode für Fragment-Manager wie,

     myActivity.getSupportFragmentManager(); 

    Aber halten Sie in Ihrem Kopf, dass Ihr Fragment sollte als android.support.app.v4.Fragment importiert werden, sonst könnte es ein Casting-Problem sein.

    Wenn Sie Fragment für eine bestimmte Registerkarte öffnen, dann sollten Sie getChildSupportFragmentManager() anstelle von getSupportFragmentManager()

    Anmerkung: Wenn du fragment von der adapter anrufen möchtest, dann solltest du eine interface und den Listener auf deine Schaltflächen klicken und deine Aktivität mit dieser Schnittstelle implementieren.

    Update:

    Auch können Sie FragmentManager an Ihren Adapter-Konstruktor weitergeben. Mögen,

     public FragmentManager f_manager; public CardAdapter(Context context,TaskFragment ma , FragmentManager f_manager) { this.context = context; this.f_manager = f_manager; main=ma; } 

    Und danach kannst du this.f_manager in deiner Adapterklasse getView() Methode verwenden.

    Wenn Sie Unterstützung Bibliotheksfragmente oder Standardfragmente verwendet haben, achten Sie darauf, dasselbe davon zu verwenden. Und benutze "getSupportFragmentManager" oder "getFragmentManager" sorgfältig.

    Pass Kontext innerhalb des Konstruktors.

     public CardAdapter(Context context) { super(); mItems = new ArrayList<NatureItem>(); NatureItem nature = new NatureItem(); nature.setName("The Paris Attack 2015"); nature.setDes("Lorem ipsum dolor sit amet."); nature.setThumbnail(R.drawable.news1); mItems.add(nature); } 

    Inside onClick

     ....Your Code ShareFragment newFragment = new ShareFragment(); FragmentTransaction transaction = /* Here is the change.*/context.getFragmentManager().beginTransaction(); transaction.replace(R.id.viewFragments, newFragment); ...Your Code 

    Aktualisieren

     Inside onClick call mainActivity setFragment method to replace fragment. ((MainActivity) context).setFragment(yourFragment); public void setFragment(Fragment frag){ FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.viewFragments, frag); } 

    Versuchen Sie das Sniped:

     ShareFragment newFragment = new ShareFragment(); itemView.getContext().getFragmentManager().beginTransaction() .replace(R.id.viewFragments, newFragment) .addToBackStack(null) .commit(); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.