java.lang.ClassNotFoundException,当我从preference-headers文件启动PreferenceFragment时

时间:2013-03-07 09:53:02

标签: android preference

  1. 这是SearchSetttingActivity使用的我的首选项头文件:

      <header android:fragment="com.android.quicksearchbox.preferences.SearchableItemsFragment"
           android:title="@string/search_sources"
       />
    
       <header android:fragment="com.android.quicksearchbox.preferences.DeviceSearchFragment"
           android:title="@string/device_settings_category_title"
       />
    
       <header android:fragment="com.android.quicksearchbox.preferences.SearchEngineFragment"
           android:title="@string/pref_content_search_engine"
       />
    

  2. 我添加了第3个片段。

    1. 这是我的SearchEngineFragment源代码:

      package com.android.quicksearchbox.preferences;
      
      import com.android.quicksearchbox.R;
      
      public class SearchEngineFragment extends SettingsFragmentBase {
      
         public SearchEngineFragment() {
         }
      
         @Override
         protected int getPreferencesResourceId() {
             return R.xml.search_engine_preferences;
         }
      

      }

    2. 每次触摸PreferenceActivity中的第三项时,每次都崩溃,崩溃日志如下:

      FATAL EXCEPTION: main
      03-06 23:10:48.133 E/AndroidRuntime(  803): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.quicksearchbox/com.android.quicksearchbox.preferences.SearchSettingsActivity}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.android.quicksearchbox.preferences.SearchEngineFragment: make sure class name exists, is public, and has an empty constructor that is public
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.os.Handler.dispatchMessage(Handler.java:99)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.os.Looper.loop(Looper.java:137)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.app.ActivityThread.main(ActivityThread.java:4424)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at java.lang.reflect.Method.invokeNative(Native Method)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at java.lang.reflect.Method.invoke(Method.java:511)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at dalvik.system.NativeStart.main(Native Method)
      03-06 23:10:48.133 E/AndroidRuntime(  803): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.android.quicksearchbox.preferences.SearchEngineFragment: make sure class name exists, is public, and has an empty constructor that is public
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.app.Fragment.instantiate(Fragment.java:581)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1117)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1133)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:532)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.app.Activity.performCreate(Activity.java:4465)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     ... 11 more
      03-06 23:10:48.133 E/AndroidRuntime(  803): Caused by: java.lang.ClassNotFoundException: com.android.quicksearchbox.preferences.SearchEngineFragment
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     at android.app.Fragment.instantiate(Fragment.java:571)
      03-06 23:10:48.133 E/AndroidRuntime(  803):     ... 17 more
      

      请帮助我,谢谢!

1 个答案:

答案 0 :(得分:0)

你试过了吗?

keep class com.android.quicksearchbox.preferences.DeviceSearchFragment
keep class com.android.quicksearchbox.preferences.SearchableItemsFragment