0

我有一个 ListActivity,当我按下一个按钮时,我启动了一个显示另一个 ListActivity 的意图。现在,我必须将这些 ListActivities 更改为 ListFragments。我这样做是为了扩大布局:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    /**Inflate the layout for this fragment*/
    return inflater.inflate(R.layout.recent_calls, container, false);
}

为了开始这个意图,现在,作为一个片段,我这样做:

CallDetailActivity Fragment_detail = new CallDetailActivity();
        FragmentManager fm = getFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.replace(R.id.recent_calls, Fragment_detail);
        transaction.addToBackStack(null);
        transaction.commit();

我的问题是,在我R.id.recent_calls进行替换的地方,我正在调用与我使用 onCreateView 初始化的相同布局的 FrameLayout id。这个可以吗?或者在使用片段时会有另一种方法来替换实际布局?类似于意图对活动所做的事情。

更新 -

我有一个错误,.replace因为它向我显示“类型 fragmenttransaction 中的方法 replace(int, fragment) 不适用于参数 (int, CallDeateilActivity)

更新 2——

<FrameLayout 
android:id="@+id/recent_calls"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ListView 
    android:id="@android:id/list"
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:scrollbarStyle="outsideOverlay"/>

<TextView 
    android:id="@android:id/empty"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="Call log is empty"
    android:gravity="center"
    android:textAppearance="?android:attr/textAppearanceLarge"/>

4

1 回答 1

1

好像您已经混合了来自支持库的片段和来自本机 android 的片段。

你必须选择什么分钟。您要支持的 sdk 版本,然后才决定使用哪些 Fragments。

我的问题是,在我将 R.id.recent_calls 放入替换的地方,我正在调用与我使用 onCreateView 初始化的相同布局的 FrameLayout id。这个可以吗?

我更喜欢使用更多的 OOP - 您可以创建一个控制器来处理从片段发送回调到切换片段的翻译等。

也检查这个问题:片段添加或替换不起作用

于 2013-11-07T11:37:59.597 回答