2014-03-29 77 views
-1

我嘗試瞭解如何使用片段創建活動。 所以我編寫了一個小例子來熟悉這個問題。Android使用片段創建活動,onCreateView

在我的設備上運行它時,它總是會崩潰,我根本不理解。

我知道問題是由onCreatingView()引起的:當我將它標記爲註釋時,不會有錯誤,並且會執行onCreate()。

有人可以解釋爲什麼應用程序崩潰?

在此先感謝


這裏是我的代碼的相關片段

OverviewActivity.java:

public class OverviewActivity extends FragmentActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_overview); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.overview, menu); 
     return true; 
    } 
} 

activity_overview:

<?xml version="1.0" encoding="utf-8"?> 
<fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/overview" 
    android:name="de.jr.dateoverview.OverviewFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

OverviewF ragment.java:

public class OverviewFragment extends ListFragment{ 
    private ListAdapter mAdapter; 


    public void onActivityCreated(Bundle savedInstanceState){ 
     super.onActivityCreated(savedInstanceState); 
     setEmptyText(getResources().getString(R.string.noEntry)); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     String[] items = new String[] { "Foo", "Bar", "Fizz", "Bin" }; 

     mAdapter = new ArrayAdapter<String>(getActivity(), R.layout.overview_tile, R.id.tile1, items); 
     setListAdapter(mAdapter); 
    } 

    @Override 
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.overview_tile, container, false); 
    } 
} 

overview_tile:

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tile1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dip"/> 

的logcat:

03-29 17:47:23.876: D/AndroidRuntime(8773): Shutting down VM 
03-29 17:47:23.876: W/dalvikvm(8773): threadid=1: thread exiting with uncaught exception (group=0x415b8ba8) 
03-29 17:47:23.876: E/AndroidRuntime(8773): FATAL EXCEPTION: main 
03-29 17:47:23.876: E/AndroidRuntime(8773): Process: de.jr.dateoverview, PID: 8773 
03-29 17:47:23.876: E/AndroidRuntime(8773): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.jr.dateoverview/de.jr.dateoverview.OverviewActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class fragment 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.os.Handler.dispatchMessage(Handler.java:102) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.os.Looper.loop(Looper.java:136) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at java.lang.reflect.Method.invoke(Method.java:515) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at dalvik.system.NativeStart.main(Native Method) 
03-29 17:47:23.876: E/AndroidRuntime(8773): Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class fragment 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.view.LayoutInflater.inflate(LayoutInflater.java:469) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.app.Activity.setContentView(Activity.java:1929) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at de.jr.dateoverview.OverviewActivity.onCreate(OverviewActivity.java:16) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.app.Activity.performCreate(Activity.java:5231) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  ... 11 more 
03-29 17:47:23.876: E/AndroidRuntime(8773): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.support.v4.app.ListFragment.ensureList(ListFragment.java:344) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.support.v4.app.ListFragment.onViewCreated(ListFragment.java:145) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:906) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1184) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:291) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
03-29 17:47:23.876: E/AndroidRuntime(8773):  ... 20 more 
+0

logcat中記錄的任何錯誤? – donfuxx

+0

是的,我將它添加到我的問題 – jr04

回答

1

確定,所以如果您選擇並稱片段prgrammatically及其已定義在XML中,這是你的錯誤。要麼它放到你的貨櫃已經或者將其添加在運行時,不能同時

03-29 17:47:23.876: E/AndroidRuntime(8773): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 

,在這裏你需要確保你的ID爲您llistview正是這一點:「android.R.id.list」

+0

03-29 17:47:23.876:E/AndroidRuntime(8773):導致:java.lang.RuntimeException:您的內容必須有一個ListView,其id屬性是'android.R.id.list' – La5t5tarfighter

+0

您的第一個小費工程已經 – jr04

+0

如果你得到一個正確的答案,請投票 – La5t5tarfighter

-1

公共類OverviewFragment擴展ListFragment { 私人ListAdapter mAdapter;

​​3210

你只需要onCreateView的片段沒有的onCreate

+0

是的。但它無法修復它。 – jr04

2

您可以瞭解從logcat的輸出誤差。

Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 

你正在創建ListFragment和你沒有在你的列表視圖layout.Define任何列表視圖爲您listFragment並設置其ID爲android.R.id.list

相關問題