【问题标题】:Frament transaction with list fragment带有列表片段的片段交易
【发布时间】:2013-08-12 19:38:01
【问题描述】:

我正在尝试实现一个导航抽屉。 “Fragment1”是一个列表片段:

public class Fragment1 extends ListFragment {
private List<String> musicList;

public static ListFragment newInstance(Context context) {
    Fragment1 f = new Fragment1();

    return f;
}

但是我不能使用 fragmenttransaction 来替换主要活动中的片段:

public class MainActivity extends AbstractNavDrawerActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if ( savedInstanceState == null ) {
        getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, new Fragment1()).commit();
    }
}


@Override
protected void onNavItemSelected(int id) {
    switch ((int)id) {
    case 101:
        getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, new Fragment1()).commit();
        break;
    case 102:
        getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, new Fragment2()).commit();
        break;
    }
}

}

replace 方法下面有一条红线,上面写着:

FragmentTransaction 类型中的方法 replace(int, Fragment) 不适用于参数 (int, Fragment1)"

我该怎么办?

【问题讨论】:

  • 如果您使用的是sherlock,您需要将您的片段定义为SherlockListFragment
  • 您的 Fragment1 属于 ListFragment 类型。并且编译器正在寻找 Fragment。
  • 如何更改它以查找列表片段?

标签: java android fragment android-listfragment


【解决方案1】:
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,     new Fragment1()).commit();

IMO,您应该避免在方法代码之后使用方法调用来编写如此长的代码,这很混乱且难以理解!也许试试:

FragmentTransaction transaction = getActivity().getSupportFragmentManager()
                    .beginTransaction();
Fragment newFragment = new Fragment1();
transaction.add(R.id.content_frame, newFragment);
transaction.addToBackStack(null);
transaction.commit();

【讨论】:

  • 试过代码,但它说方法 getActivity 是未定义的?没有其他错误
  • @GibranGul : 从上面发布的代码中删除 getActivity().,然后重试。
  • 删除突出显示的 getSupportFragmentManager().beginTransaction();并给出了这个错误:类型不匹配:无法从 android.support.v4.app.FragmentTransaction 转换为 android.app.FragmentTransaction
  • @GibranGul :在这种情况下,您的导入会混淆 - 您需要全部检查以确保您使用的是 android.support.v4 库。
  • @GibranGul :如果您使用的是Sherlock,则需要将其定义为SherlockListFragment。如果您使用的是新的支持库,则必须在您的 MainActivity 和 ListFragments 中导入:android.support.v4.app.Fragment;android.support.v4.app.FragmentTransaction;android.support.v4.app.ListFragment;
猜你喜欢
  • 1970-01-01
  • 2014-11-06
  • 2023-03-29
  • 2011-07-28
  • 2018-10-10
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
相关资源
最近更新 更多