0
내 앱에서 자동 생성 (Android Studio 제공) SettingsActivity
을 사용하고 있습니다. Preference
변경 후 Listener
앱을 다시 만들었지 만 어떤 이유에서이 Listener
에서 새로운 Intent
을 시작할 수 없습니다.PreferenceChangeListener에서 인 텐트를 시작하는 방법
private static Preference.OnPreferenceChangeListener listener = new Preference.OnPreferenceChangeListener(){
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
SettingsActivity settingsActivity = new SettingsActivity();
settingsActivity.restartApp();
return true;
}
};
그리고 :
private void restartApp() {
Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
SettingsActivity.this.finish();
startActivity(intent);
}
내가 정적 방법에서 비 정적 메소드를 호출하기 때문에이 클래스에 새로운 인스턴스를 생성 한 다음
는 코드입니다. 여기에서private static void bindPreferenceSummaryToValue(Preference preference) {
// Set the listener to watch for value changes.
preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
preference.setOnPreferenceChangeListener(listener);
// Trigger the listener immediately with the preference's
// current value.
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
PreferenceManager
.getDefaultSharedPreferences(preference.getContext())
.getString(preference.getKey(), ""));
}
그리고이 방법은 호출됩니다 :
청취자는이 방법에서 호출
Process: appinventor.ai_itiel_maimon.Rubiks_cube, PID: 14454
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
at android.app.Activity.startActivityForResult(Activity.java:4283)
at android.app.Activity.startActivityForResult(Activity.java:4230)
at android.app.Activity.startActivity(Activity.java:4567)
at android.app.Activity.startActivity(Activity.java:4535)
at appinventor.ai_itiel_maimon.Rubiks_cube.SettingsActivity.restartApp(SettingsActivity.java:59)
at appinventor.ai_itiel_maimon.Rubiks_cube.SettingsActivity.access$000(SettingsActivity.java:16)
at appinventor.ai_itiel_maimon.Rubiks_cube.SettingsActivity$2.onPreferenceChange(SettingsActivity.java:50)
at android.preference.Preference.callChangeListener(Preference.java:1173)
at android.preference.ListPreference.onDialogClosed(ListPreference.java:282)
at android.preference.DialogPreference.onDismiss(DialogPreference.java:424)
at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
재시작 app 메소드를 정적으로 만들려고했지만 Context 매개 변수는 어떻게 사용할 수 있습니까? –
'onPreferenceChangesListener'에서'static'을 제거하기 시작합니다. – Muzikant
정적이어야하는 정적 메서드에서 호출 되었기 때문에 리스너를 정적이 아닌 것으로 변경할 수 없습니다. –