Ich versuche, ein Interface
zwischen einem setzen PreferenceActivity
und MainActivity
Aber ich halte diese Nullzeiger-Fehler bekommen:eine Schnittstelle zwischen zwei Aktivitäten Initialisieren nicht funktioniert
java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.muddii.shoplist.settingactivity.SettingsChangedListener.onValutaChanged()' on a null object reference
Wie ich verstehe, bei der Initialisierung ein Interface
zwischen zwei Aktivitäten verwendet werden, dann haben Sie die Interface
zum Activity
deren Umsetzung zu werfen, wie ich es getan habe: settingsChangedListener = (SettingsChangedListener) getParent();
ein d Eltern ist die MainActivity, von der PrefActivity gestartet wird. MainActivity wird nie zerstört, also warum ist das Interface-Objekt null? Ich habe markiert auch MainActivity
als Elternteil für PrefActivity
im Manifest
PrefActivity:
public class PrefActivity extends AppCompatPreferenceActivity implements Preference.OnPreferenceChangeListener {
SettingsChangedListener settingsChangedListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
//initializing the interface here. Parent is MainActivity
settingsChangedListener = (SettingsChangedListener) getParent();
editTextPreference = (EditTextPreference) findPreference(VALUTA_KEY);
listPreference = (ListPreference) findPreference(SORT_KEY);
themecolorList = (ListPreference) findPreference(THEME_KEY);
editTextPreference.setOnPreferenceChangeListener(this);
listPreference.setOnPreferenceChangeListener(this);
themecolorList.setOnPreferenceChangeListener(this);
}
Wie würde ich dann in diesem Fall eine Schnittstelle für eine Aktivität initialisieren? Ich habe andere Beispiele gesehen, in denen getParent(); wird durch Kontext ersetzt – Muddz
@Muddz: Sie würden nicht. Aktivitäten wie Webseiten sind weitgehend unabhängig. Höchstwahrscheinlich sollte Ihre 'MainActivity' nach Präferenzänderungen Ausschau halten und darauf reagieren. "Ich habe andere Beispiele gesehen, bei denen getParent(); durch Kontext ersetzt wurde - nicht zwischen Aktivitäten, die Sie nicht haben. – CommonsWare
Also gehe ich davon aus, dass ich diese PrefActivity stattdessen mit 'startActivityForResult()' starten muss, um über Änderungen in PrefActivity benachrichtigt zu werden. – Muddz