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

  • Finden Sie die Verwendung von id funktioniert nicht in Android Studio unter Windows
  • Ameise nicht in der Lage, Javac zu finden, JAVA_HOME wird nicht auf Ubuntu gesetzt
  • Wie mache ich 4x1 Größe Widget auf Android Homescreen?
  • Wie bekomme ich den aktuellen Standort in Android
  • Wie zu lösen Nicht unterstütztOperationException Erforderliche Methode destroyItem wurde nicht überschrieben
  • Recycler View mit mehreren Zeilen und Spalten - AutoFit wie Flow Layout
  • 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(); } }); } } } 

  • HTTPS mit selbstsignierten SSL-Zertifikatsproblemen ... Lösung oder besserer Weg?
  • Gradle-Befehle fehlgeschlagen API 23 Google API Emulator Bild (armeabi-v7a)
  • Wie kann ich den Code der Android-Version wie 1.5 oder 1.6 einchecken
  • ViewPager - erhalten Sie eine Teilansicht der nächsten Seite
  • Wie kann ich das Standard-Hintergrundbild von ImageButton entfernen?
  • Android Socket.IO Best Practices für die Verbindung am Leben zu halten
  • 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.