ЦЕЛЬ: когда пользователь меняет предпочтение в настройках, я хотел бы выполнить действие в основной деятельности.В частности, мне нужно изменить HashMap.
ПРОБЛЕМА: Я не могу найти решение.И я начинаю думать, что мой подход неправильный вверх по течению.
MainActivity
public class MainActivity extends AppCompatActivity {
// db declaration //
private SignalDatabase db;
private HashMap<Integer, String> RSSIcolorHmap ;
}
НастройкиActivity
public class SettingsActivity extends AppCompatActivity {
public static class MainSettingsFragment extends PreferenceFragmentCompat {
public final static String KEY_ENABLE_BACKGROUND_UPDATE = "enable_background_update";
public final static String KEY_ENABLE_LAST_KNOWN_LOCATION = "enable_last_known_location";
public final static String KEY_DELETE_DB_DATA = "delete_db_data";
public final static String KEY_CHANGE_MAP_COLOR ="change_map_color";
private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener;
@Override
public void onCreatePreferences(Bundle bundle, String s) {
// Load the Preferences from the XML file
addPreferencesFromResource(R.xml.preferences);
preferenceChangeListener = new
SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equals(KEY_DELETE_DB_DATA))
{
String connectivityType = sharedPreferences.getString(key, null);
new DeleteAreaAsync(SignalAreaDatabase.getDatabase(getContext()), connectivityType).execute();
} else if(key.equals(KEY_CHANGE_MAP_COLOR)){
String gradientColor = sharedPreferences.getString(key, null);
/* I want to use this value to take action on MainActivity's HashMap. */
}
}
};
}
}
}
ЧТО Я ПОПЫТАЛ
Я читал о том, как получить эти две (нерабочие) идеи:
# 1 МЕТОД
SettingsActivity settingsActivity = (SettingsActivity)getActivity();
MapsActivity mapsActivity = (MapsActivity) settingsActivity.getParent();
, но getParent()
всегда возвращает null
,С веб-сайта разработчика Android:
Возвращает родительское действие, если это представление является вложенным дочерним элементом .
# METHOD2
SettingsActivity settingsActivity = (SettingsActivity)getActivity();
MapsActivity mapsActivity = (MapsActivity) settingsActivity.getCallingActivity();
Но в этом случае getCallingActivity()
возвращает объект ComponentName
, из которого я не могу получить ссылку на относительную активность.
ВОПРОСЫ:
1) Является ли этот подход совершенно неверным в восходящем направлении?Если да, как я могу решить?
2) Если нет, возможно ли заставить один из двух методов, описанных выше, работать?
3) Что именно означает встроенный ребенок?