8

我彻底糊涂了。根据这个这个以及许多其他来源,无论是在 SO 还是在其他地方,我应该能够做到以下几点:

import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.view.Menu;

public class MainScreenActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_screen);
    MainRightFragment mrf = new MainRightFragment();
    RecommendedFragment rf = new RecommendedFragment();

    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.add(R.id.main_search_boxes, mrf, "fragmentright");
    ft.add(R.id.main_left_side, rf, "fragmentreccomend");
}

}

R.id 引用指向我的 .xml 文件中的 FrameLayout 对象。为什么我仍然收到“ FragmentTransaction 类型中的方法 add(int, Fragment, String) 不适用于参数 (int, RecommendedFragment, String) ”错误消息?

4

4 回答 4

8

MainScreenActivity应该扩展FragmentActivity而不仅仅是Activity. 另外,别忘了打电话ft.commit();

于 2013-10-24T08:47:09.167 回答
3

要在运行时添加片段,您需要从以下位置扩展您的主要活动:android.support.v4.app.FragmentActivity

并且您需要使用 android.support.v4.app包中的 FragmentManager 和 FragmentTransaction 类,而不是 android.app。

此外,当您获得 FragmentManager 时,请使用方法 getSupportFragmentManager()。请看下面的代码:

FragmentManager fm = getSupportFragmentManager();

FragmentTop fragTop = new FragmentTop();
FragmentLeft fragLeft = new FragmentLeft();

FragmentTransaction ft = fm.beginTransaction();

ft.add(R.id.fragTop, fragTop);
ft.add(R.id.fragLeft, fragLeft);

ft.commit();

参考:http: //developer.android.com/intl/pt-br/training/basics/fragments/fragment-ui.html

于 2015-12-12T15:43:11.247 回答
1

这更像是投降而不是答案,但我能够使用 FragmentActivity/support.v4.app 得到我想要的。我仍然不明白为什么我上面引用的参考资料似乎说可以将 .add(...) 函数与现代 API 一起使用。
harsha.cs 和 Damien 都指向 FragmentActivity,所以在有人解释为什么有必要使用向后兼容 API 之前,我将给出这两点,并推迟检查答案。

于 2013-10-31T15:48:19.380 回答
0

尝试这个。

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(FragmentA.this.getParent().getID(), mNewFragment,"your frame name");
ft.addToBackStack(null);
ft.commit();
于 2013-10-24T08:57:34.703 回答