【问题标题】:Android: compatibility package Fragment crashAndroid:兼容包Fragment崩溃
【发布时间】:2011-08-03 20:43:23
【问题描述】:

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

<?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)

【问题讨论】:

  • 从 logcat 发布堆栈跟踪
  • 如果您希望我们帮助您解决崩溃问题,请发布堆栈跟踪。
  • 谢谢 smith324 和 LeffelMania。错误 logcat 显示此错误:08-03 22:03:22.946: ERROR/AndroidRuntime(938): Caused by: java.lang.IllegalStateException: Fragment com.companyname.appname.MainMenuFragment 未创建视图。 所以我在 MainMenuFragment 类中覆盖了onCreateView() 并让它返回一个视图,这很有效。奇怪的是它在 v3.2 中没有崩溃。
  • 当我将片段块放入布局文件中时发生了这个错误,但没有通过 FragmentTransaction 添加它。为了解决这个问题,我从布局文件中删除了片段块,并在必要时使用了 FragmentTransaction。

标签: java android android-compatibility


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    有时您不希望将 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: 未调用 new Fragment()在我的示例中,因为我使用 Roboguice 进行依赖注入。

    【讨论】:

    • 谢谢,但我的 Fragment 应该有一个 UI。我只是想写一个最低限度的实现来看看它是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多