【问题标题】:PreferenceFragment java.lang.RuntimeExceptionPreferenceFragment java.lang.RuntimeException
【发布时间】:2013-05-04 22:04:51
【问题描述】:

我按照这个链接Single Headercommonsware提供的示例进行操作

当我运行它时,它给了我以下 logcat 的强制关闭,

任何建议将不胜感激,谢谢

日志猫:

FATAL EXCEPTION: main
 java.lang.RuntimeException: Unable to start activity ComponentInfo   
 {com.commonsware.android.pref1header/com.commonsware.android.pref1header.
 FragmentsDemo}: android.view.InflateException: Binary XML file line #1: Error  
 inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #1: Error 
         inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:587)
at android.view.LayoutInflater.inflate(LayoutInflater.java:386)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
at com.android.internal.policy.impl.PhoneWindow.setContentView
     (PhoneWindow.java:216)
at android.app.Activity.setContentView(Activity.java:1660)
at com.commonsware.android.pref1header.FragmentsDemo.onCreate 
     (FragmentsDemo.java:28)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
... 11 more
   Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to  
    instantiate fragment 
   com.commonsware.android.pref1header.PreferenceContentsFragment: make sure class 
     name exists, is public, and has an empty constructor that is public
at android.support.v4.app.Fragment.instantiate(Fragment.java:401)
at android.support.v4.app.Fragment.instantiate(Fragment.java:369)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
... 19 more
  Caused by: java.lang.ClassNotFoundException:  
  com.commonsware.android.pref1header.PreferenceContentsFragment in loader 
  dalvik.system.PathClassLoader[/data/app/com.commonsware.android.pref1header-1.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at android.support.v4.app.Fragment.instantiate(Fragment.java:391)
... 22 more

JAVA类如下:

编辑首选项:

 public class EditPreferences extends PreferenceActivity {
   private boolean needResource=false;

   @SuppressWarnings("deprecation")
  @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

  if (needResource
      || Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    addPreferencesFromResource(R.xml.preferences);
         }
       }

  @Override
 public void onBuildHeaders(List<Header> target) {
   if (onIsHidingHeaders() || !onIsMultiPane()) {
    needResource=true;
         }
  else {
     loadHeadersFromResource(R.xml.preference_headers, target);
        }
      }
    }

StockPreferenceFragment:

  public class StockPreferenceFragment extends PreferenceFragment {
 @Override
  public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

 int res=

     getActivity().getResources().getIdentifier(getArguments().getString
         ("resource"), "xml",getActivity().getPackageName());

       addPreferencesFromResource(res);
             }
        }

PreferenceContentsFragment:

  public class PreferenceContentsFragment extends Fragment {
      private TextView checkbox=null;
      private TextView ringtone=null;
      private TextView checkbox2=null;
      private TextView text=null;
      private TextView list=null;

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {
     View result=inflater.inflate(R.layout.content, parent, false);

  checkbox=(TextView)result.findViewById(R.id.checkbox);
  ringtone=(TextView)result.findViewById(R.id.ringtone);
  checkbox2=(TextView)result.findViewById(R.id.checkbox2);
  text=(TextView)result.findViewById(R.id.text);
  list=(TextView)result.findViewById(R.id.list);

    return(result);
      }

  @Override
    public void onResume() {
     super.onResume();

   SharedPreferences prefs=
      PreferenceManager.getDefaultSharedPreferences(getActivity());

  checkbox.setText(new Boolean(prefs.getBoolean("checkbox", false)).toString());
  ringtone.setText(prefs.getString("ringtone", "<unset>"));
  checkbox2.setText(new Boolean(prefs.getBoolean("checkbox2", false)).toString());
  text.setText(prefs.getString("text", "<unset>"));
  list.setText(prefs.getString("list", "<unset>"));
        }
    }

片段演示:

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

  @Override
   public boolean onCreateOptionsMenu(Menu menu) {
   new MenuInflater(this).inflate(R.menu.actions, menu);

     return(super.onCreateOptionsMenu(menu));
             }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
     case R.id.settings:
       startActivity(new Intent(this, EditPreferences.class));

        return(true);
               }

    return(super.onOptionsItemSelected(item));
      }
     }

【问题讨论】:

    标签: java android


    【解决方案1】:

    最好让 Eclipse 运行超过异常点并查看 LogCat。

    话虽如此,你的问题是:

    Caused by: java.lang.ClassNotFoundException: com.commonsware.android.pref1header.PreferenceContentsFragment
    

    如果您将应用程序移动到自己的包中,则需要调整其他文件以匹配,特别是 res/xml/preference_headers.xml

    【讨论】:

    • 先生,我保持与您的示例相同的包名:com.commonsware.android.pref1header
    • logcat 提示:在 com.commonsware.android.pref1header.FragmentsDemo.onCreate(FragmentsDemo.java:28) 错误
    • @AndroidStack:那么,您的环境出了点问题,因为该应用程序确实可以运行。我现在才在这里运行它。
    • 我做了一件事,它是否会影响你原来的 PreferenceContentsFragment 类:public class PreferenceContentsFragment extends SherlockFragment { 但我把它写成: public class PreferenceContentsFragment extends Fragment { 也适用于其他类
    • @AndroidStack:如果您只使用 API 级别 11 或更高级别,则不需要此应用程序。此应用程序使用 ActionBarSherlock 允许它在 API 级别 7 和更高级别上工作。您需要将自己的 ActionBarSherlock 库项目副本附加到您的开发环境中的此项目中,以便使用 Sherlock* 类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多