【发布时间】:2018-12-24 13:12:20
【问题描述】:
我是 Android 新手,在关闭应用程序时需要保留一个整数 weekNumber。我的想法是在处理需要使用该值的片段的活动中设置值,并始终使用 getter 从那里获取值,但是当我关闭应用程序或切换片段时,weekNumber 会不断重置,即使我使用共享首选项。我将保存的数据加载到活动的 onCreate 中,并将数据保存在 onPause 中。也许这是错误的。为什么会这样?我将不胜感激,并希望了解更多信息!
这是我处理 Fragments 的 MainActivity:
public class MainActivity extends AppCompatActivity {
private int weekNumber;
private static final String SHARED_PREFS = "sharedPrefs";
private static final String WEEK_NUMBER = "weekNumber";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigation);
bottomNavigationView.setOnNavigationItemSelectedListener(navListener);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new HomeFragment()).commit();
loadData();
}
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.nav_home:
selectedFragment = new HomeFragment();
break;
case R.id.nav_add:
selectedFragment = new CalculatorFragment();
break;
case R.id.nav_settings:
selectedFragment = new SettingsFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,selectedFragment).commit();
return true;
}
};
@Override
protected void onPause() {
super.onPause();
saveData();
}
public void saveData() {
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS,MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(WEEK_NUMBER,weekNumber);
}
public void loadData() {
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS,MODE_PRIVATE);
weekNumber = sharedPreferences.getInt(WEEK_NUMBER,1);
}
public int getWeekNumber() {
return weekNumber;
}
public void setWeekNumber(int weekNumber) {
this.weekNumber = weekNumber;
}
其中一个片段:
public class HomeFragment extends Fragment {
View rootView;
private TextView[] textViews;
MainActivity mainActivity = new MainActivity();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_home,container,false);
textViews = new TextView[16];
for(int i=0; i<textViews.length; i++) {
{
String buttonID = "textView" + (i+1);
int resID = getResources().getIdentifier(buttonID, "id", getActivity().getPackageName());
textViews[i] = ((TextView) rootView.findViewById(resID));
}
}
setWeekText();
textViews[9].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(),ActivityDay1.class));
}
});
Button buttonNextWeek = rootView.findViewById(R.id.buttonNextWeek);
buttonNextWeek.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mainActivity.setWeekNumber(mainActivity.getWeekNumber()+1);
setWeekText();
}
});
return rootView;
}
private void setWeekText() {
textViews[8].setText(String.valueOf(mainActivity.getWeekNumber()));
}
【问题讨论】:
标签: android android-studio android-fragments sharedpreferences