我正在构建一个天气应用程序,但是我的“设置”页面上的“后退”功能遇到问题。正如您在下面的礼物中看到的那样,我将城市切换到新奥尔良,然后打开设置页面。当我从设置页面单击“后退”按钮时,它会返回,但会重新加载MainActivity,该设置会将城市设置为用户的默认设置,就像他们首次打开应用程序时一样。我希望它返回到与用户打开设置时完全相同的屏幕,而无需重新加载数据。在MasterFragment的onCreateView()中检索数据,这是此处显示的主要天气屏幕。
SettingsFragment扩展了PreferenceFragmentCompat并位于SettingsActivity的xml中,该XML是从MainActivity启动的,如下所示:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
我没有在SettingsActivity中实现onBackPressed()
。
我已经解决了一些关于后置堆栈的问题,但是似乎没有一个问题可以解决我现有的设置。
编辑: MainActivity.java(activity_main.xml文件是主要天气片段的容器)
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private DrawerLayout drawer;
private NavigationView navigationView;
private SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
prefs = getSharedPreferences("com.jggdevelopment.simpleweather", Context.MODE_PRIVATE);
if (prefs.getBoolean("useDarkTheme", false)) {
setTheme(R.style.DarkTheme);
} else {
setTheme(R.style.LightTheme);
}
super.onCreate(savedInstanceState);
// Setup the content view
setContentView(R.layout.activity_main);
drawer = findViewById(R.id.drawer_layout);
navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
// This is a mostly blank activity, so MasterFragment needs to be pushed onto the content_frame
MasterFragment master = new MasterFragment();
pushToFragmentManager(getSupportFragmentManager(), R.id.content_frame, master, false);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_settings) {
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}