2014-04-05 3 views
1

여기서 도와주세요. 지난 2 일 동안 벽돌 벽을 치고 있습니다. 알아낼 수 없습니다.Android : Error inflating class PreferenceScreen

나는 간단한 PreferenceFragment를 가지고 있으며 그것을 Activity에서 팽창시키고 싶습니다. 여기

인 고해상도/XML/preferences.xml로 :

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="preferences"> 
<PreferenceCategory 
     android:title="@string/notification_basic" 
     android:key="notification"> 
    <CheckBoxPreference 
      android:key="enable_notification" 
      android:summary="@string/enable_notification" 
      android:title="@string/notification_title" 
      android:defaultValue="false"> 
    </CheckBoxPreference> 
    <CheckBoxPreference 
      android:key="enable" 
      android:summary="@string/enable_instant_notification" 
      android:title="@string/notify_me_instantly" 
      android:dependency="enable_notification" 
      android:defaultValue="false"> 
    </CheckBoxPreference> 
</PreferenceCategory> 
<PreferenceCategory 
     android:title="@string/sign_up_notify_me_where_section" 
     android:key="locations"> 
    <MultiSelectListPreference 
      android:dialogTitle="@string/sign_up_notify_me_where_title" 
      android:key="location" 
      android:summary="@string/sign_up_notify_me_where" 
      android:title="@string/sign_up_notify_me_where_title" 
      android:entries="@array/locations" 
      android:entryValues="@array/locations_values" 
      android:defaultValue="@array/empty_array" 
      android:dependency="enable_notification" 
      /> 
</PreferenceCategory> 
<PreferenceCategory 
     android:title="@string/sign_up_notify_me_type_section" 
     android:key="types"> 
    <MultiSelectListPreference 
      android:dialogTitle="@string/sign_up_notify_me_type_title" 
      android:key="type" 
      android:summary="@string/sign_up_notify_me_type" 
      android:title="@string/sign_up_notify_me_type_title" 
      android:entries="@array/types" 
      android:entryValues="@array/types_values" 
      android:defaultValue="@array/empty_array" 
      android:dependency="enable_notification" 
      /> 
</PreferenceCategory> 
<PreferenceCategory 
     android:title="@string/sign_up_notify_me_who_section" 
     android:key="units"> 
    <MultiSelectListPreference 
      android:dialogTitle="@string/sign_up_notify_me_who_title" 
      android:key="units" 
      android:summary="@string/sign_up_notify_me_who" 
      android:title="@string/sign_up_notify_me_who_title" 
      android:entries="@array/units" 
      android:entryValues="@array/units_values" 
      android:defaultValue="@array/empty_array" 
      android:dependency="enable_notification" 
      /> 
    </PreferenceCategory> 
</PreferenceScreen> 

활동 :

public class HomeActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.home); 
    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(R.id.fragment_container, new SignUpPreferenceFragment()); 
    fragmentTransaction.commit(); 
    } 
} 

활동의 레이아웃 :

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/home_layout"> 
<FrameLayout android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:id="@+id/fragment_container" 
     /> 
</RelativeLayout> 

그리고 마지막으로 스택 트레이스 :

04-05 20:11:07.641: ERROR/AndroidRuntime(5731): FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity  ComponentInfo{com.soid.client.activities/com.soid.client.activities.HomeActivity}:  android.view.InflateException: Binary XML file line #1: Error inflating class  PreferenceScreen 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2355) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391) 
    at android.app.ActivityThread.access$600(ActivityThread.java:151) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1335) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:155) 
    at android.app.ActivityThread.main(ActivityThread.java:5520) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.view.InflateException: Binary XML file line #1: Error inflating  class PreferenceScreen 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:698) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:466) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
    at  com.soid.client.activities.SignUpPreferenceFragment.onCreateView(SignUpPreferenceFragment.ja va:18) 
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:831) 
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1037) 
    at android.app.BackStackRecord.run(BackStackRecord.java:635) 
    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1399) 
    at android.app.Activity.performStart(Activity.java:5075) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2328) 
    ... 11 more 
    Caused by: java.lang.ClassNotFoundException: android.view.PreferenceScreen 
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:552) 
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:643) 
    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
    ... 20 more 

android.view에서 PreferenceScreen을 검색하는 이유는 무엇입니까? 나는 완전히 길을 잃었 어.

편집 :

public class SignUpPreferenceFragment extends PreferenceFragment { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
} 

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

감사합니다 : 나는 실제 PreferenceFragment를 붙여 잊었

!

당신은이 같은 preference.xml 팽창 클래스가 있어야합니다
+0

나는 당신이 당신의'SignUpPreferenceFragment' 클래스에'onCreate'이 무엇인지 볼 수 있습니다 styles.xml에 기본 테마를 추가 하시겠습니까? – singularhum

+0

이 http://stackoverflow.com/questions/13593141/how-do-i-add-preference-screen-to-viewpager는 같은 문제입니다. – eleven

+0

죄송합니다. 코드 조각을 붙여 넣는 것을 잊었습니다. 나는 지금 초기 게시물을 편집했다. @singularhum – tarja

답변

11

을 .

그 이유는 PreferenceScreen이 xml의 해당 태그/클래스를 이해하지 못하기 때문에 오류가 발생했다는 오류가 발생합니다.

preferences.xml의 팽창은 addPreferencesFromResource에 의해 onCreate으로 이루어진다.

Reference

+0

정말 고마워요! 'addPreferencesFromResource'가 실제로 당신의 설명을 확인한 것을 보았습니다. 나는 조각 개념 전체에 익숙하지 않으며 나는 자습서를 열심히 조금 따르고 있었다고 생각한다. – tarja

+1

addPreferencesFromIntent와 함께 API 11에서 더 이상 사용되지 않음 –

1

:

public static class SignUpPreferenceFragment extends PreferenceFragment { 

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

    // Load the preferences from an XML resource 
    addPreferencesFromResource(R.xml.preferences); 
} 

} 당신이 인플레이터를 사용하여 기본 설정을 부풀려 수 없기 때문에 당신은 당신의 SignUpPreferenceFragmentonCreateView 기능을 제거해야

-1

<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>