2011-08-03 34 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