Start FragmentTransaction from within ArrayAdapter

前端 未结 3 1527
感情败类
感情败类 2020-12-30 13:44

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

相关标签:
3条回答
  • 2020-12-30 14:14

    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();
    }
    
    0 讨论(0)
  • 2020-12-30 14:30

    First get the context in your Constructor and then try following code,

    FragmentTransaction ft = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction();
    
    0 讨论(0)
  • 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

    0 讨论(0)
提交回复
热议问题