Android:兼容包Fragment崩溃

时间:2011-08-03 20:43:24

标签: java android android-compatibility

我正在尝试使用Android兼容包来创建一个使用Fragments的向后兼容应用。但是,当我在Android v2.2模拟器上运行它时崩溃了。它不会在我的Xoom(v3.2)上崩溃。我怀疑main.xml中的fragment标签可能是原因:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <fragment android:name="com.companyname.appname.MainMenuFragment"
        android:id="@+id/mainMenu"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="fill_parent" />
</LinearLayout>

这是FragmentActivity:

package com.companyname.appname;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class AppName extends FragmentActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

这是碎片:

package com.companyname.appname;

import android.support.v4.app.Fragment;

public class MainMenuFragment extends Fragment {

}

有什么想法吗?

由于

编辑:我已针对API级别8(Android v2.2)

2 个答案:

答案 0 :(得分:2)

谢谢,smith324和LeffelMania。错误logcat显示此错误:08-03 22:03:22.946:ERROR / AndroidRuntime(938):引起:java.lang.IllegalStateException:片段com.companyname.appname.MainMenuFragment未创建视图。所以我在我的MainMenuFragment类中覆盖了onCreateView()并让它返回一个View,这就有效了。奇怪的是它没有在v3.2中崩溃。

答案 1 :(得分:1)

有时您不希望将UI附加到Fragment。例如,在我的应用程序中,我有一个片段负责在操作栏中用作操作视图的菜单项。在这种情况下,您无法实施onCreateView()

如“添加没有UI的片段”部分中的Android Fragment user guide所述,您必须以编程方式将片段添加到他的活动中。

以下是我在活动中使用的代码:

// Add the address bar fragment
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(addressBarFragment,"address_bar_fragment");
fragmentTransaction.commit();

注1:我使用getSupportFragmentManager()代替getFragmentManager(),因为我使用兼容性库。
注2:在我的例子中没有调用新的Fragment(),因为我使用Roboguice进行依赖注入。