2011-08-03 53 views
1

我试图使用Android兼容包创建使用碎片向后兼容的应用程序。但是,当我在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(安卓V2.2)

+0

从logcat发布堆栈跟踪 – smith324

+0

如果您希望我们帮助您处理崩溃,请发布堆栈跟踪。 – LeffelMania

+0

谢谢,smith324和LeffelMania。错误logcat显示此错误: _08-03 22:03:22.946:错误/ AndroidRuntime(938):引起:java.lang.IllegalStateException:片段com.companyname.appname.MainMenuFragment未创建视图._ 所以我推翻''onCreateView我MainMenuFragment类(),把它返回一个视图,这个工作。奇怪的是,它没有在v3.2崩溃。 – Ken

回答

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

有时你不希望一个用户界面连接到您的片段。例如,在我的应用程序中,我有一个片段负责用作操作栏中操作视图的菜单项。在这种情况下,您无法执行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:新的片断()是不是在我的例子叫,因为我使用Roboguice的依赖性注入。

+0

谢谢,但我的片段应该有一个用户界面。我只是试图写一个最低限度的实现,看它是否工作。 – Ken