1

Here I want to open fragment inside RecycleView but its show error but when I open activity its work here. When try to open a fragment with here of fragment manager the Recycler view class can not resolve to getFragmentManager() method inside it. Kindly provide a solution for it

public class AdapterMudra extends RecyclerView.Adapter<AdapterMudra.ReyclerViewHolder> {

private LayoutInflater layoutInflater;
private Context context;
private ArrayList<ItemMudra> items;

public AdapterMudra(Context context, ArrayList<ItemMudra> items) {

    this.layoutInflater = LayoutInflater.from(context);
    this.context = context;
    this.items = items;

}
@Override
public ReyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View item = layoutInflater.inflate(R.layout.item_recycler_view, parent, false);

    return new ReyclerViewHolder(item);
}

@Override
public void onBindViewHolder(final ReyclerViewHolder holder, int position) {
    ItemMudra item = items.get(position);

    holder.image.setImageResource(item.getDrawableMudra());
    holder.appName.setText(item.getNameMudra());
}

@Override
public int getItemCount() {
    return items.size();
}

class ReyclerViewHolder extends RecyclerView.ViewHolder {
    private ImageView image;
    private TextView appName;

    private ReyclerViewHolder(final View v) {
        super(v);

        image = (ImageView) v.findViewById(R.id.image);
        MyName = (TextView) v.findViewById(R.id.my_name);

        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                if(MyName.getText().toString()=="XYZ")
                {







 ***//Fragment Not open here show error////
***
Here I want to call Fragment but its show error in GetFragment Manager***


                Fragment fragment= new XYZ();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.replace(R.id.fragment_container, fragment); 
                transaction.addToBackStack(null);  // this will manage backstack
                transaction.commit();


                }
                if(MyName.getText().toString()=="ABC")
                {



*** //Here Its Work When I open activity inside it*** 

                    Intent intent=new Intent(v.getContext(),ExtraActivityFormTesting.class);
                    context.startActivity(intent);
                }



            }
        });
    }
}
}
pRaNaY
  • 24,642
  • 24
  • 96
  • 146
mohit singh
  • 149
  • 1
  • 5

4 Answers4

0

I assume your context is an Activity so you can do something like

((Activity) context).getFragmentManager()
WenChao
  • 3,586
  • 6
  • 32
  • 46
0

First make sure the other fragmented class has the necessary implementations and constructors to be fragmented. Meaning, the class XYZ could be preventing your fragment transaction for missing out few essentials.

The following imports for instance

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

Now if thats in order. then Firstly I want you to reform

   Fragment fragment= new XYZ();

to

   XYZ fragment= new XYZ();

Second your fragment manager is badly constructed

reform this

 Fragment fragment= new XYZ();
            FragmentTransaction transaction = getFragmentManager().beginTransaction();

to

     XYZ fragment= new XYZ();
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

*And for future references, you need to bring in the error log from the terminal

Khaledonia
  • 2,054
  • 3
  • 15
  • 33
  • On using ***FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();*** Error Occered --> Error:(74, 59) error: cannot find symbol method getSupportFragmentManager() – mohit singh Feb 04 '17 at 18:21
0

if your problem is using getFragmentManaget to implement do like below: create FragmentManager fm = getFragmentManager(); in your Fragment and passed it to your RecyclerView and again passed it to your ViewHolder and use it. so easy.

note: passed means send it as argumant to constructor

-1
Fragment fragment= new FirstFragment();
FragmentManager manager = (MainActivityForRecy)context).getSupportFragmentManager();
                    FragmentTransaction transaction = manager.beginTransaction();
                    transaction.replace(R.id.fragment_container, fragment);
                    transaction.addToBackStack(null);  // this will manage backstack
                    transaction.commit();
                    Toast.makeText(context, "you press clicked",Toast.LENGTH_SHORT).show();
Dhara Patel
  • 359
  • 5
  • 19
  • there is no need to again pass the **mainActivityForRecy** as context is already passed. Only thing is required is to cast that context to activity then call getSupportFragmentManager – Sanjeet Feb 04 '17 at 10:24
  • yes, because it is required to cast it to some activity **((YourActivityName) context).getSupportFragmentManager();** will work – Sanjeet Feb 04 '17 at 10:27
  • 1
    brackets are misplaced try **((MainActivityForRecy)context).getSupportFragmentManager();** – Sanjeet Feb 04 '17 at 10:29