2014-03-29 80 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

相关问题