I have a ListView
with several rows. Each row has a button
.
I want the button to start a FragmentTransaction to replace the Fragment that
getSupportFragmentManager()
is only defined for the class FragmentActivity
, not for Context
. Thus, the compiler can't resolve the call if you try to call it on an object of type Context
.
You can use reflection to do this in a safe way. This will always work as long as you pass your FragmentActivity as the Context
. Note: FragmentActivity is a subclass of Context, and thus you can pass FragmentActivity wherever you can pass Context.
So use this code instead:
if (getContext() instanceof FragmentActivity) {
// We can get the fragment manager
FragmentActivity activity = (FragmentActivity(getContext()));
FragmentTransaction t = activity.getSupportFragmentManager().beginTransaction();
}
First get the context in your Constructor and then try following code,
FragmentTransaction ft = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction();
I'd suggest you to pass FragmentManager
instance to the Adapter
constructor like that:
public class YourAdapter extends...
private FragmentManage mFragmentManager;
public YourAdapter(FragmentManager fm) {
mFragmentManager = fm;
}
And use it explicitly:
FragmentTransaction ft = mFragmentManager.beginTransaction();
That should give you posibility to initialize Adapter
with either Fragment.getFragmentManager()
or FragmentActivity.getSupportFragmentManager()
instance, since they are pointed at the same object