0

애플리케이션을 사용하는 동안 내 PreferenceFragment 화면에서 방향을 변경하면 애플리케이션이 강제 종료됩니다. 나는 오리엔테이션을 단지 초상화 또는 단지 나의 적용을위한 풍경으로 적용하고 싶지 않다. 미리 감사드립니다.Android PreferenceFragment : java.lang.RuntimeException

로그 캣 ::

12-24 21:46:52.296 7540-7540/com.example.timepass.sampleapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.example.timepass.sampleapp, PID: 7540 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.timepass.sampleapp/com.example.timepass.sampleapp.PreferencesActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3912) 
     at android.app.ActivityThread.access$900(ActivityThread.java:144) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5221) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference 
     at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:95) 
     at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:88) 
     at android.support.v7.internal.app.ToolbarActionBar.<init>(ToolbarActionBar.java:84) 
     at android.support.v7.app.ActionBarActivityDelegateBase.setSupportActionBar(ActionBarActivityDelegateBase.java:175) 
     at android.support.v7.app.ActionBarActivity.setSupportActionBar(ActionBarActivity.java:92) 
     at com.example.timepass.sampleapp.PreferencesActivity$SettingsPreference.onCreate(PreferencesActivity.java:109) 
     at android.app.Fragment.performCreate(Fragment.java:2031) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:863) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1049) 
     at android.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1864) 
     at android.app.Activity.onCreate(Activity.java:935) 
     at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:255) 
     at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:122) 
     at com.example.timepass.sampleapp.PreferencesActivity.onCreate(PreferencesActivity.java:31) 
     at android.app.Activity.performCreate(Activity.java:5933) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3912) 
at android.app.ActivityThread.access$900(ActivityThread.java:144) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5221) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

PreferencesActivity.java

public class PreferencesActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.settings); 
getFragmentManager().beginTransaction() 
     .replace(R.id.content_frame, new SettingsPreference()) 
     .commit(); 
} 

public static class SettingsPreference extends PreferenceFragment { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    // applyTheme(); 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.pref_settings); 
    android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) getActivity().findViewById(R.id.toolbar); 
    ((ActionBarActivity)getActivity()).setSupportActionBar(toolbar); 

} 
} 

Settings.XML의

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.timepass.sampleapp.Settings" 
android:fitsSystemWindows="true"> 

<android.support.v7.widget.Toolbar 
android:id="@+id/toolbar" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="?attr/colorPrimary" 
android:minHeight="?attr/actionBarSize" 
app:navigationContentDescription="@string/abc_action_bar_up_description" 
app:navigationIcon="?attr/homeAsUpIndicator" 
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
app:title="@string/action_settings" /> 
<FrameLayout 
android:id="@+id/content_frame" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_below="@+id/toolbar" /> 

</RelativeLayout> 

답변

0

FO 이동 깜박이는 줄

android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) getActivity().findViewById(R.id.toolbar); 
((ActionBarActivity)getActivity()).setSupportActionBar(toolbar); 

내부에있는 콜백 Fragment#onActivityCreated(Bundle savedInstanceState).

이유는 Fragment#onCreate(Bundle savedInstanceState)이 호출 될 때 Activity이 아직 인스턴스화되지 않았기 때문입니다. Fragment#getActivity() 메서드는 현재 null을 반환하고 에 Activity을 반환하도록 보장됩니다.

관련 문제