从SettingsActivity返回时如何维护MainActivity UI和状态

时间:2019-07-14 23:09:17

标签: android android-fragments android-activity

我正在构建一个天气应用程序,但是我的“设置”页面上的“后退”功能遇到问题。正如您在下面的礼物中看到的那样,我将城市切换到新奥尔良,然后打开设置页面。当我从设置页面单击“后退”按钮时,它会返回,但会重新加载MainActivity,该设置会将城市设置为用户的默认设置,就像他们首次打开应用程序时一样。我希望它返回到与用户打开设置时完全相同的屏幕,而无需重新加载数据。在MasterFragment的onCreateView()中检索数据,这是此处显示的主要天气屏幕。

SettingsFragment扩展了PreferenceFragmentCompat并位于SettingsActivity的xml中,该XML是从MainActivity启动的,如下所示:

Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);

我没有在SettingsActivity中实现onBackPressed()

我已经解决了一些关于后置堆栈的问题,但是似乎没有一个问题可以解决我现有的设置。

gif of current behavior

编辑: 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;
    }
}

0 个答案:

没有答案