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.

6 Solutions collect form web for “Cómo llamar a getFragmentManager en Recycler.Adapter?”

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... } } 
  • El contenido del fragmento se superpone a la barra de herramientas
  • Pasar la consulta de búsqueda ActionBar para fragmentar
  • ¿Es posible buscar dentro de Fragmentos?
  • Android.app Fragments vs. android.support.v4.app usando ViewPager?
  • ¿Cuál es la diferencia entre commit () y commitAllowingStateLoss () en Fragments
  • ViewPager, PagerAdapter y Bitmap causan pérdida de memoria (OutOfMemoryError)
  • Android - Deslizamiento de fragmentos al hacer clic en elemento de lista
  • Android quita el fragmento y la vista de BackStack
  • ¿Por qué una clase de fragmento no puede ser válida?
  • Cómo crear un cuadro de diálogo con pestañas con Android que contiene fragmentos?
  • No se pueden retener fragmentos anidados
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.