从Array Adapter显示片段

时间:2017-01-22 14:53:17

标签: android android-fragments

我的应用程序使用多个片段来显示不同的标签。 第一个片段是带有自定义单元格的列表视图。每个单元格都有自己的一组按钮。我想在单击按钮时显示不同的片段。要知道何时单击所需按钮,我在阵列适配器中为我的列表添加了一个onclick事件。有没有办法从Array Adapter中显示新片段。到目前为止我尝试了什么,它没有奏效:

    final FragmentManager fragmentManager = ((Activity)mContext)getSupportFragmentManager();
    final FragmentTransaction fragmentTransaction =                  fragmentManager.beginTransaction();

    PostFragment postFr = new PostFragment();

    fragmentTransaction.replace(R.id.detail_container, postFr);


    fragmentTransaction.commit();

2 个答案:

答案 0 :(得分:0)

试试这段代码:

final FragmentManager fragmentManager = ((FragmentActivity)mContext).getSupportFragmentManager();
final FragmentTransaction fragmentTransaction =  fragmentManager.beginTransaction();
PostFragment postFr = new PostFragment();
fragmentTransaction.replace(R.id.detail_container, postFr);
fragmentTransaction.commit();

getSupportFragmentManager()仅针对课程FragmentActivity定义,而不是Activity

答案 1 :(得分:0)

当你试图这样做时出了什么问题?

这是我用来转换到新片段的方法。我将它放在一个抽象的BaseActivity类中(扩展了AppCompatActivity),以便我的所有实现活动都使用该方法。

该方法获取您想要去的片段,以及一个布尔变量来指示是否将该事务添加到后台堆栈。

活动必须在其XML资源文件中声明一个FrameLayout,其id为" container"。这是片段的放置位置。

public void gotoFragment(Fragment fragment, boolean addToBackStack) {
    FragmentTransaction transaction = getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.container, fragment);
    if (addToBackStack) {
        transaction.addToBackStack(null);
    }
    transaction.commit();
}

要从ArrayAdapter类调用此方法,请将BaseActivity的实例传递到适配器的构造函数中。

对于适配器的Context参数,从片段传递getActivity()。

如果您的所有活动类都扩展了BaseActivity类,您可以在适配器中安全地说:

public class CustomArrayAdapter extends ArrayAdapter {

private BaseActivity mActivity;

public CustomArrayAdapter(Context pContext, int pLayoutResource, List<Object> pItems) {
    super(pContext, pLayoutResource);
    mActivity = (BaseActivity) pContext;
}

@Override
public void onItemClick(int position) {
    if (mActivity != null) {
        mActivity.goToFragment(new PostFragment());
    }
}