从ArrayAdapter中启动FragmentTransaction

时间:2013-03-11 00:28:05

标签: android android-fragments android-arrayadapter

我有一个ListView有几行。每行都有一个button

我希望按钮启动FragmentTransaction以替换ListView所在的Fragment。

但是,在getView()的{​​{1}}方法中,此行不起作用:

Adapter

它不喜欢上下文。

这可以通过这种方式完成,还是交易必须在其他地方进行?

3 个答案:

答案 0 :(得分:33)

首先在构造函数中获取上下文,然后尝试使用代码

FragmentTransaction ft = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction();

答案 1 :(得分:12)

getSupportFragmentManager()仅为课程FragmentActivity定义,而不是Context。因此,如果您尝试在Context类型的对象上调用它,则编译器无法解析该调用。

您可以使用反射以安全的方式执行此操作。只要您将FragmentActivity作为Context传递,这将始终有效。注意:FragmentActivity是Context的子类,因此您可以在任何可以传递Context的地方传递FragmentActivity。

所以请改用此代码:

if (getContext() instanceof FragmentActivity) {
    // We can get the fragment manager
    FragmentActivity activity = (FragmentActivity(getContext()));
    FragmentTransaction t = activity.getSupportFragmentManager().beginTransaction();
}

答案 2 :(得分:4)

我建议您将FragmentManager实例传递给Adapter构造函数:

public class YourAdapter extends...

    private FragmentManage mFragmentManager;        

    public YourAdapter(FragmentManager fm) {
        mFragmentManager = fm;
    }

明确使用它:

FragmentTransaction ft = mFragmentManager.beginTransaction();

这应该让您可以使用AdapterFragment.getFragmentManager()实例初始化FragmentActivity.getSupportFragmentManager(),因为它们指向同一个对象