2014-06-18 5 views
0

새 프로젝트에서 PreferenceActivity를 만들면 제대로 작동하기 때문에 혼란 스럽지만 현재 프로젝트에서 만들면 작동하지 않습니다. 나는 코드가 자동 생성 일식입니다 Error inflating class android.widget.Switch

<uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="19" /> 

(14)을 통해 제 SDK 버전입니다 확신합니다.

package com.example.cornerstorepos; 

import android.annotation.TargetApi; 
import android.content.Context; 
import android.content.res.Configuration; 
import android.media.Ringtone; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.os.Build; 
import android.os.Bundle; 
import android.preference.ListPreference; 
import android.preference.Preference; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceCategory; 
import android.preference.PreferenceFragment; 
import android.preference.PreferenceManager; 
import android.preference.RingtonePreference; 
import android.text.TextUtils; 
import android.util.Log; 

import java.util.List; 

/** 
* A {@link PreferenceActivity} that presents a set of application settings. On 
* handset devices, settings are presented as a single list. On tablets, 
* settings are split by category, with category headers shown to the left of 
* the list of settings. 
* <p> 
* See <a href="http://developer.android.com/design/patterns/settings.html"> 
* Android Design: Settings</a> for design guidelines and the <a 
* href="http://developer.android.com/guide/topics/ui/settings.html">Settings 
* API Guide</a> for more information on developing a Settings UI. 
*/ 
public class SettingsActivity extends PreferenceActivity { 
    /** 
    * Determines whether to always show the simplified settings UI, where 
    * settings are presented in a single list. When false, settings are shown 
    * as a master/detail two-pane view on tablets. When true, a single pane is 
    * shown on tablets. 
    */ 
    private static final boolean ALWAYS_SIMPLE_PREFS = false; 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 

    setupSimplePreferencesScreen(); 
} 

/** 
* Shows the simplified settings UI if the device configuration if the 
* device configuration dictates that a simplified, single-pane UI should be 
* shown. 
*/ 
private void setupSimplePreferencesScreen() { 
    if (!isSimplePreferences(this)) { 
     return; 
    } 

    // In the simplified UI, fragments are not used at all and we instead 
    // use the older PreferenceActivity APIs. 

    // Add 'general' preferences. 
    addPreferencesFromResource(R.xml.pref_general); 

    // Add 'notifications' preferences, and a corresponding header. 
    PreferenceCategory fakeHeader = new PreferenceCategory(this); 
    fakeHeader.setTitle(R.string.pref_header_notifications); 
    getPreferenceScreen().addPreference(fakeHeader); 
    addPreferencesFromResource(R.xml.pref_notification); 

    // Add 'data and sync' preferences, and a corresponding header. 
    fakeHeader = new PreferenceCategory(this); 
    fakeHeader.setTitle(R.string.pref_header_data_sync); 
    getPreferenceScreen().addPreference(fakeHeader); 
    addPreferencesFromResource(R.xml.pref_data_sync); 

    // Bind the summaries of EditText/List/Dialog/Ringtone preferences to 
    // their values. When their values change, their summaries are updated 
    // to reflect the new value, per the Android Design guidelines. 
    bindPreferenceSummaryToValue(findPreference("example_text")); 
    bindPreferenceSummaryToValue(findPreference("example_list")); 
    bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone")); 
    bindPreferenceSummaryToValue(findPreference("sync_frequency")); 
} 

/** {@inheritDoc} */ 
@Override 
public boolean onIsMultiPane() { 
    return isXLargeTablet(this) && !isSimplePreferences(this); 
} 

/** 
* Helper method to determine if the device has an extra-large screen. For 
* example, 10" tablets are extra-large. 
*/ 
private static boolean isXLargeTablet(Context context) { 
    return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; 
} 

/** 
* Determines whether the simplified settings UI should be shown. This is 
* true if this is forced via {@link #ALWAYS_SIMPLE_PREFS}, or the device 
* doesn't have newer APIs like {@link PreferenceFragment}, or the device 
* doesn't have an extra-large screen. In these cases, a single-pane 
* "simplified" settings UI should be shown. 
*/ 
private static boolean isSimplePreferences(Context context) { 
    return ALWAYS_SIMPLE_PREFS 
      || Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB 
      || !isXLargeTablet(context); 
} 

/** {@inheritDoc} */ 
@Override 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public void onBuildHeaders(List<Header> target) { 
    if (!isSimplePreferences(this)) { 
     loadHeadersFromResource(R.xml.pref_headers, target); 
    } 
} 

/** 
* A preference value change listener that updates the preference's summary 
* to reflect its new value. 
*/ 
private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() { 
    @Override 
    public boolean onPreferenceChange(Preference preference, Object value) { 
     String stringValue = value.toString(); 

     if (preference instanceof ListPreference) { 
      // For list preferences, look up the correct display value in 
      // the preference's 'entries' list. 
      ListPreference listPreference = (ListPreference) preference; 
      int index = listPreference.findIndexOfValue(stringValue); 

      // Set the summary to reflect the new value. 
      preference 
        .setSummary(index >= 0 ? listPreference.getEntries()[index] 
          : null); 

     } else if (preference instanceof RingtonePreference) { 
      // For ringtone preferences, look up the correct display value 
      // using RingtoneManager. 
      if (TextUtils.isEmpty(stringValue)) { 
       // Empty values correspond to 'silent' (no ringtone). 
       preference.setSummary(R.string.pref_ringtone_silent); 

      } else { 
       Ringtone ringtone = RingtoneManager.getRingtone(
         preference.getContext(), Uri.parse(stringValue)); 

       if (ringtone == null) { 
        // Clear the summary if there was a lookup error. 
        preference.setSummary(null); 
       } else { 
        // Set the summary to reflect the new ringtone display 
        // name. 
        String name = ringtone 
          .getTitle(preference.getContext()); 
        preference.setSummary(name); 
       } 
      } 

     } else { 
      // For all other preferences, set the summary to the value's 
      // simple string representation. 
      preference.setSummary(stringValue); 
     } 
     return true; 
    } 
}; 

/** 
* Binds a preference's summary to its value. More specifically, when the 
* preference's value is changed, its summary (line of text below the 
* preference title) is updated to reflect the value. The summary is also 
* immediately updated upon calling this method. The exact display format is 
* dependent on the type of preference. 
* 
* @see #sBindPreferenceSummaryToValueListener 
*/ 
private static void bindPreferenceSummaryToValue(Preference preference) { 
    // Set the listener to watch for value changes. 
    preference 
      .setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); 

    // Trigger the listener immediately with the preference's 
    // current value. 
    sBindPreferenceSummaryToValueListener.onPreferenceChange(
      preference, 
      PreferenceManager.getDefaultSharedPreferences(
        preference.getContext()).getString(preference.getKey(), 
        "")); 
} 

/** 
* This fragment shows general preferences only. It is used when the 
* activity is showing a two-pane settings UI. 
*/ 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public static class GeneralPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_general); 
     // Bind the summaries of EditText/List/Dialog/Ringtone preferences 
     // to their values. When their values change, their summaries are 
     // updated to reflect the new value, per the Android Design 
     // guidelines. 
     bindPreferenceSummaryToValue(findPreference("example_text")); 
     bindPreferenceSummaryToValue(findPreference("example_list")); 
    } 
} 

/** 
* This fragment shows notification preferences only. It is used when the 
* activity is showing a two-pane settings UI. 
*/ 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public static class NotificationPreferenceFragment extends 
     PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_notification); 

     // Bind the summaries of EditText/List/Dialog/Ringtone preferences 
     // to their values. When their values change, their summaries are 
     // updated to reflect the new value, per the Android Design 
     // guidelines. 
     bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone")); 
    } 
} 

/** 
* This fragment shows data and sync preferences only. It is used when the 
* activity is showing a two-pane settings UI. 
*/ 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public static class DataSyncPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_data_sync); 

     // Bind the summaries of EditText/List/Dialog/Ringtone preferences 
     // to their values. When their values change, their summaries are 
     // updated to reflect the new value, per the Android Design 
     // guidelines. 
     bindPreferenceSummaryToValue(findPreference("sync_frequency")); 
    } 
} 

}

다음은 XML 코드입니다.

<CheckBoxPreference 
    android:key="example_checkbox" 
    android:summary="@string/pref_description_social_recommendations" 
    android:title="@string/pref_title_social_recommendations" /> 
<SwitchPreference 
      android:key="checkbox_preference" 
      android:title="@string/pref_title_social_recommendations"  /> 

<!-- NOTE: EditTextPreference accepts EditText attributes. --> 
<!-- NOTE: EditTextPreference's summary should be set to its value by the activity code. --> 
<EditTextPreference 
    android:capitalize="words" 
    android:defaultValue="@string/pref_default_display_name" 
    android:inputType="textCapWords" 
    android:key="example_text" 
    android:maxLines="1" 
    android:selectAllOnFocus="true" 
    android:singleLine="true" 
    android:title="@string/pref_title_display_name" /> 

<!-- 
    NOTE: Hide buttons to simplify the UI. Users can touch outside the dialog to 
    dismiss it. 
--> 
<!-- NOTE: ListPreference's summary should be set to its value by the activity code. --> 
<ListPreference 
    android:defaultValue="-1" 
    android:entries="@array/pref_example_list_titles" 
    android:entryValues="@array/pref_example_list_values" 
    android:key="example_list" 
    android:negativeButtonText="@null" 
    android:positiveButtonText="@null" 
    android:title="@string/pref_title_add_friends_to_messages" /> 

는 오류 메시지입니다.

06-18 16:35:33.377: E/AndroidRuntime(28815): FATAL EXCEPTION: main 
06-18 16:35:33.377: E/AndroidRuntime(28815): android.view.InflateException: Binary XML file line #19: Error inflating class android.widget.Switch 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.LayoutInflater.createView(LayoutInflater.java:613) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.LayoutInflater.inflate(LayoutInflater.java:466) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.preference.Preference.onCreateView(Preference.java:536) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.preference.Preference.getView(Preference.java:507) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:330) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.AbsListView.obtainView(AbsListView.java:2360) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.ListView.makeAndAddView(ListView.java:1883) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.ListView.fillDown(ListView.java:716) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.ListView.fillFromTop(ListView.java:777) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.ListView.layoutChildren(ListView.java:1699) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.AbsListView.onLayout(AbsListView.java:2161) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.View.layout(View.java:14123) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewGroup.layout(ViewGroup.java:4464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1673) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.onLayout(LinearLayout.java:1444) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.View.layout(View.java:14123) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewGroup.layout(ViewGroup.java:4464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.FrameLayout.onLayout(FrameLayout.java:464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.View.layout(View.java:14123) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewGroup.layout(ViewGroup.java:4464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1673) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.onLayout(LinearLayout.java:1444) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.View.layout(View.java:14123) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewGroup.layout(ViewGroup.java:4464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1673) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1662) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.onLayout(LinearLayout.java:1446) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.View.layout(View.java:14123) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewGroup.layout(ViewGroup.java:4464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1673) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.onLayout(LinearLayout.java:1444) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.View.layout(View.java:14123) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewGroup.layout(ViewGroup.java:4464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.FrameLayout.onLayout(FrameLayout.java:464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.View.layout(View.java:14123) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewGroup.layout(ViewGroup.java:4464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1673) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.LinearLayout.onLayout(LinearLayout.java:1444) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.View.layout(View.java:14123) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewGroup.layout(ViewGroup.java:4464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.widget.FrameLayout.onLayout(FrameLayout.java:464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.View.layout(View.java:14123) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewGroup.layout(ViewGroup.java:4464) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2183) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1947) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4879) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.Choreographer.doCallbacks(Choreographer.java:579) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.Choreographer.doFrame(Choreographer.java:548) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.os.Handler.handleCallback(Handler.java:725) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-18 16:35:33.377: E/AndroidRuntime(28815): at android.os.Looper.loop(Loope 

감사합니다. :)

답변