B
Braesident
Ambitioniertes Mitglied
- 1
Hallo Android-Hilfe Team,
ich stehe vor dem Problem meine Daten nicht in den Preferences speichern zu können... und ich komm nicht drauf wo das Problem liegt.
Ich habe eine Activity die einen ViewPager und einen FragmentStatePagerAdapter instantiiert.
Das erste Fragment ist eine Übersicht über die folgenden Fragmente. Diese haben dann EditText's in denen Eingaben aus den Preferences schon vorgegeben sind.
Im Fragment 1 (Übersicht) gibt es ein Button um:
Aber auch nach einem Neustart der App steht wieder der alte Wert im EditText des jeweiligen Fragments.
Lasse ich die Zeile ((PagesActivity)getActivity()).updatePages(); weg, steht "Neuer Wert" zumindest nach einem Neustart der App im EditText.
Wie kann ich in die Preferences schreiben UND die Fragmente aktualisieren ?
ich stehe vor dem Problem meine Daten nicht in den Preferences speichern zu können... und ich komm nicht drauf wo das Problem liegt.
Ich habe eine Activity die einen ViewPager und einen FragmentStatePagerAdapter instantiiert.
Das erste Fragment ist eine Übersicht über die folgenden Fragmente. Diese haben dann EditText's in denen Eingaben aus den Preferences schon vorgegeben sind.
Im Fragment 1 (Übersicht) gibt es ein Button um:
- Daten neu zu laden
- diese in den Preferences zu hinterlegen
- und die Fragmente zu aktuallisieren
Aber auch nach einem Neustart der App steht wieder der alte Wert im EditText des jeweiligen Fragments.
Java:
public class PagesActivity extends AppCompatActivity {
private PagesFragmentStatePagerAdapter pagerAdapter;
private ViewPager viewPager;
private PagesViewModel pagesViewModel;
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pages);
pagesViewModel = PagesViewModel.getSingeltonInstance(getBaseContext());
sharedPreferences = pagesViewModel.getSharedPreferences();
pagerAdapter = new PagesFragmentStatePagerAdapter(getSupportFragmentManager());
viewPager = findViewById(R.id.activity_pages);
setupViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager){
pagerAdapter.addFragment(new CategoryFragment(), "Categories");
pagerAdapter.addFragment(new CompanyFragment(), "Company");
// ... weitere Fragmente
viewPager.setAdapter(pagerAdapter);
}
public void setViewPager(int fragmentNumber){
viewPager.setCurrentItem(fragmentNumber);
}
public void updatePages(){
pagerAdapter.notifyDataSetChanged();
}
@Override
public void onBackPressed() {
//super.onBackPressed();
if (viewPager.getCurrentItem() != 0) {
// goto View before
//viewPager.setCurrentItem(viewPager.getCurrentItem() - 1,false);
// goto Overview
viewPager.setCurrentItem(0,false);
}else{
pagesViewModel.save();
setResult(RESULT_OK);
finish();
}
}
}
public class PagesFragmentStatePagerAdapter extends FragmentStatePagerAdapter {
final List<Fragment> fragmentList = new ArrayList<>();
final List<String> fragmentTitleList = new ArrayList<>();
public PagesFragmentStatePagerAdapter(FragmentManager fm) {
super(fm);
}
public void addFragment(Fragment fragment, String title) {
fragmentList.add(fragment);
fragmentTitleList.add(title);
}
@Override
public Fragment getItem(int i) {
return fragmentList.get(i);
}
@Override
public int getCount() {
return fragmentList.size();
}
@Override
public int getItemPosition(@NonNull Object object) {
return POSITION_NONE;
}
}
public class CategoryFragment extends Fragment implements View.OnClickListener {
RelativeLayout button_company;
RelativeLayout button_reset;
private PagesViewModel pagesViewModel;
private SharedPreferences sharedPreferences;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_category, container, false);
button_company = view.findViewById(R.id.btn_company);
button_reset = view.findViewById(R.id.btn_reset);
button_company.setOnClickListener(this);
button_reset.setOnClickListener(this);
pagesViewModel = PagesViewModel.getSingeltonInstance(getContext());
//sharedPreferences = pagesViewModel.getSharedPreferences();
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
return view;
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_company:
((PagesActivity)getActivity()).setViewPager(1);
break;
case R.id.btn_reset:
//resetSettings();
sharedPreferences.edit().putString("company_mail", "Neuer Wert").apply();
((PagesActivity)getActivity()).updatePages();
break;
}
}
}
public class CompanyFragment extends Fragment {
EditText editText_company;
EditText editText_company_mail;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
PagesViewModel pagesViewModel = PagesViewModel.getSingeltonInstance(getContext());
View inflateView = inflater.inflate(R.layout.fragment_company, container, false);
editText_company = inflateView.findViewById(R.id.company_data);
editText_company_mail = inflateView.findViewById(R.id.company_mail);
pagesViewModel.ObserveUiOnChange(editText_company);
pagesViewModel.ObserveUiOnChange(editText_company_mail);
return inflateView;
}
public CompanyFragment(){}
}
...
public void ObserveUiOnChange(EditText editText){
editText.setText(singeltonInstance.sharedPreferences.getString(editText.getResources().getResourceEntryName(editText.getId()), ""));
// OnChangeListener wird gesetzt usw...
}
...
Wie kann ich in die Preferences schreiben UND die Fragmente aktualisieren ?
Zuletzt bearbeitet: