사용자 정의 Android 환경 설정 화면을 작성하고 있는데 헤더가 조각을 가지고 있지 않을 때 조각이 예상되는 b/c가 충돌합니다. - 주어진 섹션 세트의 제목 인 헤더 만 갖고 싶습니다. . 검색을 시도했지만 아무 쓸모가 없으므로 미안합니다.조각이없는 기본 설정 헤더?
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header android:id="@+id/headerStaffGeneral" android:title="@string/staff_general" /> <!-- This causes a crash as name == null -->
<header
android:id="@+id/headerSettings"
android:fragment="com.example.ex.prefs.SettingsPreferencesFragment"
android:title="@string/staff_manager_settings"
android:icon="@drawable/ic_action_settings"
/>
</preference-headers>
다른 코드를 포함해야하는 경우
pref_headers.xml
HEADER
태그를 교체해야하는 경우 내 질문의 본질이다.
UPDATE : 첫 번째 HEADER
태그가 pref_headers.xml
파일에서 제거 된 경우
LogCat Output
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ex/com.example.ex.prefs.PrefsActivity}: java.lang.NullPointerException: name == null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295)
at android.app.ActivityThread.access$700(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:175)
at android.app.ActivityThread.main(ActivityThread.java:5279)
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:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException: name == null
at java.lang.VMClassLoader.findLoadedClass(Native Method)
at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:491)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.Fragment.instantiate(Fragment.java:582)
at android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1245)
at android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1278)
at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:647)
at android.app.Activity.performCreate(Activity.java:5283)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
... 11 more
PrefsActivity.java
package com.example.ex.prefs;
import java.util.ArrayList;
import java.util.List;
import android.preference.PreferenceActivity;
import android.widget.ListAdapter;
import com.example.ex.R;
public class PrefsActivity extends PreferenceActivity {
private List<Header> mHeaders;
protected void onResume() {
super.onResume();
setTitle(R.string.staff_manager_settings);
if (getListAdapter() instanceof PrefsHeaderAdapter)
((PrefsHeaderAdapter) getListAdapter()).resume();
}
protected void onPause() {
super.onPause();
if (getListAdapter() instanceof PrefsHeaderAdapter)
((PrefsHeaderAdapter) getListAdapter()).pause();
}
public void onBuildHeaders(List<Header> target) {
// Called when the settings screen is up for the first time
// we load the headers from our xml description
loadHeadersFromResource(R.xml.pref_headers, target);
mHeaders = target;
}
public void setListAdapter(ListAdapter adapter) {
int i, count;
if (mHeaders == null) {
mHeaders = new ArrayList<Header>();
// When the saved state provides the list of headers,
// onBuildHeaders is not called
// so we build it from the adapter given, then use our own adapter
count = adapter.getCount();
for (i = 0; i < count; ++i)
mHeaders.add((Header) adapter.getItem(i));
}
super.setListAdapter(new PrefsHeaderAdapter(this, mHeaders));
}
}
이 오류가 표시되지 않습니다.
분명히 활동이 첫 번째 헤더의 존재하지 않는 "단편"을로드하려고합니다. 'PrefsHeaderAdapter'에서'@Override public boolean isEnabled (int position) {리턴 위치! = 0; }' – ozbek
그건 작동하지 않았지만 tx. –