Я пытаюсь сохранить несколько переменных из различных ящиков EditText и Textview в общем предпочтении, у которого есть определенное имя (поэтому общие предпочтения по умолчанию невозможны). Сохранение из действия C и последующее извлечение работает нормально. Однако, если я сохраню их во фрагменте действия D и попытаюсь получить их позже, я получу пустое поле. Даже значение по умолчанию не отображается. Это должно быть как-то связано с фрагментом, но я не смог найти правильный синтаксис, чтобы заставить его работать. Этот ответ ( Shared Preferences во фрагменте среди других) мне не помог (так как он использует общие настройки по умолчанию).
Вот часть метода создания действия Деятельности C, в котором общие настройки фиксируются
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_produktspezifikation);
//region BUTTON DEKLARATION
Button neuesWST = (Button) findViewById(R.id.btn_Neu_WST);
neuesWST.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
startActivity(new Intent(C_Produktspezifikation.this,WST_bearbeiten.class));
}
});
Button Weiter = (Button) findViewById(R.id.btn_Produktspezifikation_weiter);
Weiter.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//region DATEN SPEICHERN
//Variablen definieren, um die Daten aus den Feldern auszulesen
TextView WstName = (TextView) findViewById(R.id.tv_WST);
TextView Schnittweg = (TextView) findViewById(R.id.tv_Schnittweg_Eintrag);
EditText Stueckzahl = (EditText) findViewById(R.id.et_Stuekzahl_Eintrag);
EditText Losgroesse = (EditText) findViewById(R.id.et_Losgroesse_Eintrag);
//Shared Preferences definieren
SharedPreferences sharedpref = getSharedPreferences("Datenspeicher", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpref.edit();
//Daten in benannter SharedPreference speichern
editor.putString("wstname", WstName.getText().toString());
editor.putString("schnittweg", Schnittweg.getText().toString());
editor.putString("stueckzahl", Stueckzahl.getText().toString());
editor.putString("losgroesse", Losgroesse.getText().toString());
editor.commit();
//endregion
startActivity(new Intent(C_Produktspezifikation.this,D_Maschine.class));
}
});
За исключением фрагмента Деятельности D (другой идентичен), где хранятся дополнительные настройки:
public class Maschine_v1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_maschine_variante_1, container, false);
//Variablen definieren, um die Daten aus den Feldern auszulesen
TextView maschinenname_v1 = (TextView) rootView.findViewById(R.id.tv_m_v1_Maschine);
TextView anschaffungswert_v1 = (TextView) rootView.findViewById(R.id.tv_m_v1_Anschaffungswert_Eintrag);
TextView raumbedarf_v1 = (TextView) rootView.findViewById(R.id.tv_m_v1_Raumbedarf_Eintrag);
TextView el_Anschlusswert_v1 = (TextView) rootView.findViewById(R.id.tv_m_v1_el_Anschlusswert_Eintrag);
//Shared Preferences definieren
SharedPreferences sharedpref = this.getActivity().getSharedPreferences("Datenspeicher", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpref.edit();
//Daten in benannter SharedPreference speichern
editor.putString("maschinenname_v1", maschinenname_v1.getText().toString());
editor.putString("anschaffungswert_v1", anschaffungswert_v1.getText().toString());
editor.putString("raumbedarf_v1", raumbedarf_v1.getText().toString());
editor.putString("el_anschlusswert_v1", el_Anschlusswert_v1.getText().toString());
editor.commit();
И Фрагмент Деятельности E, где предполагается, что общие Предпочтения из Деятельности D извлекаются и не отображаются:
anschaffungswert_v1 происходит из действия D (или, скорее, его фрагмент) и не работает.
Schnittweg происходит из действия C и работает.
public class Werkzeug_v1 extends android.support.v4.app.Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_werkzeug_variante_1, container, false);
TextView tv = (TextView) rootView.findViewById(R.id.tv_v1_Werkzeug_Abnutzung_Eintrag);
TextView tv2 = (TextView) rootView.findViewById(R.id.tv_v1_Werkzeug_Schnittweg_Eintrag);
SharedPreferences sharedPref = this.getActivity().getSharedPreferences("Datenspeicher", Context.MODE_PRIVATE);
String test = sharedPref.getString("anschaffungswert_v1","N/A");
String test2 = sharedPref.getString("schnittweg", "");
tv.setText(test);
tv2.setText(test2);
Вот Datenspeicher.xml
(мой общий файл настроек) после сохранения в Деятельности D:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="anschaffungswert_v1"></string>
<string name="maschinenname_v1"></string>
<string name="schnittweg">1200</string>
<string name="el_anschlusswert_v1"></string>
<string name="losgroesse"></string>
<string name="wstname">Werkstück 1</string>
<string name="stueckzahl">33</string>
<string name="raumbedarf_v1"></string>
</map>