Cómo llamar a getFragmentManager en Recycler.Adapter?

Estoy convirtiendo ListView de mi aplicación a RecyclerView. En ListView, fue muy fácil implementar OnClickListener pero en RecyclerView, tenemos que hacerlo en el adaptador. Quiero abrir un nuevo fragmento cuando el usuario hace clic en un elemento. Para hacer esto tengo que llamar a FragmentManager en el adaptador que no soy capaz de hacer. Este es mi código de RecyclerAdapter:

public ListItemViewHolder(View itemView) { super(itemView); title = (TextView) itemView.findViewById(R.id.title); description = (TextView) itemView.findViewById(R.id.description); itemView.setOnClickListener(this); } @Override public void onClick(View v) { //Call FragmentManager and add Fragment to it. } } 

Así que, cómo llamar a FragmentManager y agregar fragmentos en él. ¿Hay alguna mejor manera que esto como sendingBroadcast o cualquier otro método.

Sólo necesita un contexto de actividad pasado en su constructor. Asegúrese de llamar al new Adapter(this,...) de las actividades y el new Adapter(getActivity(),...) de los fragmentos.

 private Context context; @Override public void onClick(View v) { FragmentManager manager = ((Activity) context).getFragmentManager(); } 

Para añadir a la respuesta aprobada: si sigue recibiendo un error, puede que tenga que reemplazar esta línea;

 FragmentManager manager = ((Activity)context).getFragmentManager(); 

Con este

 FragmentManager manager = ((AppCompatActivity)context).getSupportFragmentManager(); 

Para mí esto era porque estaba utilizando el support.v4.app.FragmentManager lugar del regular fragmentmanager

La mejor opción sería probablemente tener el Fragmento que instancia el RecyclerAdapter para implementar e interfaz como esto:

 public class MyRecyclerAdapter extends Adapter<RecyclerAdapter.ViewHolder> { private ItemType[] mItems; private MRAItemClickedListener mListener; public MyRecyclerAdapter(Context ctx, MRAItemClickedListener listener){ mListener = listener; ... } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.itemView.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { mListener.onItemClicked(mItems[position]); } }); } interface MRAItemClickedListener { void onItemClicked(ItemType item); } } public class MyFragment ... implements MRAItemClickedListener { public void onItemClicked(ItemType item){ // do stuff with item } } 

Sé que es demasiado tarde para ti, pero para cualquiera que pueda ver esto.

Así que, en lugar de hacer m vai, puede pasar el contexto del fragmento al inicializar su adaptador.

Así que en su constructor para su adaptador puede agregar un argumento como este

  // variable to hold fragment private Fragment fragment; public MyCustomAdapter(Fragment fragment) { this.fragment = fragment; } 

y en su fragmento sólo puede inicializar si así

  MyCustomAdapter myAdapter = new MyCustomAdapter(this); 

finalmente puedes llamar

 Fragment fragment = new myNewFragment(); FragmentManager fragmentManager = context.getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.fragment_container, fragment) .commit(); 

así que usted puede comenzar un nuevo fragmento

Sólo necesita un contexto de actividad pasado en su constructor. Asegúrese de llamar al nuevo Adapter(this,...) de las actividades y el new Adapter(getActivity(),...) de los fragmentos.

private Context context; @Override public void onClick(View v) { FragmentManager manager = ((Activity) context).getFragmentManager();}

Puede pasar la referencia de FragmentManager mientras crea el visor para que su clase para el Visor de cuentas pueda ser la siguiente

 class ListItemViewHolder { FragmentManager manager; public ListItemViewHolder(View itemView,FragmentManager manager) { super(itemView); title = (TextView) itemView.findViewById(R.id.title); description = (TextView) itemView.findViewById(R.id.description); itemView.setOnClickListener(this); this.manager = manager; } @Override public void onClick(View v) { //Call FragmentManager and add Fragment to it. manager.beginTransaction... } } 
  • Se abre Multiple PlaceAutoCompleteFragment cuando se hace clic en él muy rápidamente
  • Cómo manejar onBack Press en Fragmento Android
  • ¿Vincular el servicio a la actividad o fragmento?
  • Acceda a getActivity () dentro del método estático
  • Fragmentos y actividades - ¿dónde pongo la lógica de mi aplicación?
  • FragmentStatePagerAdapter con ChildFragmentManager - FragmentManagerImpl.getFragment resultados en NullPointerException
  • Añadir acción de botón en la notificación personalizada
  • Espere con la operación hasta que se creen Vistas de fragmentos
  • ¿Cómo puedo restaurar un Fragmento visualizado anteriormente?
  • Android reemplaza el fragmento dentro de un fragmento
  • 2 ViewPager no se desplaza en Android 2.3
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.