如何完成 Main Activity onBackPressed?

How to finish Main Activity onBackPressed?

我正在为我的应用程序设置主题。主题设置得很好。我有两个主要活动 activity,另一个是设置 activity.

当我从设置 activity 设置主题时,我调用了设置 activity 的 Main Activity onBackPressed。于是出现了改变的主题。

但是,如果我按下主 activity 的后退键,它会再次显示具有先前主题的主 activity,并在第二次关闭应用程序。

它不应该再次显示以前的主题。如果立即返回,我想完成 Main activity。

我尝试调用 main 的 finish onBackPressed activity 但它没有用。

怎么办?

主要Activity

public class MainActivity extends AppCompatActivity {

    private NavigationView navigationView;
    private DrawerLayout drawerLayout;
    Toolbar mToolbar;
    private MainFragment mFragment;
    private int no,no1,no2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        Theme.onActivityCreateSetTheme(this);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DatabaseHelper db = new DatabaseHelper(this);
        db.createDatabase();


        setUpToolbar();
        drawerLayout = (DrawerLayout) findViewById(R.id.nav_drawer);
        navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                drawerLayout.closeDrawers();
                menuItem.setChecked(true);
                switch (menuItem.getItemId()) {

                    case R.id.settings:

                        Intent i = new Intent(getApplicationContext(),Settings.class);
                        startActivity(i);

                }
                return true;
            }
        });
        mFragment = new MainFragment();
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.nav_contentframe, mFragment).commit();
    }

    private void setUpToolbar() {
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        if (mToolbar != null) {
            mToolbar.setTitle("");
            setSupportActionBar(mToolbar);}
        if (mToolbar != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            mToolbar.setNavigationIcon(R.drawable.ic_drawer);
            mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    drawerLayout.openDrawer(GravityCompat.START);
                }
            });
        }
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main2, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {


            Intent i = new Intent(this,Settings.class);
            startActivity(i);

            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onBackPressed()

    {
        super.onBackPressed();
        this.finish();
    }
}

编辑:

如果我刚刚完成设置 activity,更改的主题不会应用到主要 activity。正如我所说的 Theme.onActivityCreateSetTheme(this); ----onCreate of main activity,所以为此我从设置 activity.

再次启动了 main activity

或者设置完成后如何应用主题activity?

谢谢..

在设置 Activity 中按下返回键,即可完成设置 Activity。 所以它将转到 Main Activity.

所以将下面的代码放在覆盖方法 onBackPressed 中。

@Override
public void onBackPressed() {
    super.onBackPressed();
  Intent i=new Intent(this,MainActivity.class);
  i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
  i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  finish();
}

可以通过多种方式完成...

在你的主要 Activity:

Intent i = new Intent(this, Settings.class);
MainActivity.this.finish();
startActivity(i);

在您的设置中 Activity:

 @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent i = new Intent(this, MainActivity.class);
        Settings.this.finish();
        startActivity(i);
    }

或在 Manifest 文件中使用 android:noHistory="true"

   <activity android:name=".Settings"
   android:noHistory="true"/>

这样试试

{//.............
 Intent i  = new Intent (this, Settings.class);
 startActivityForResult(i, 123);
//............

}

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK&&requestCode==123){
            startActivity(new Intent(this,MainActivity.class));
            finish();
        }
    }

请在您的清单文件中尝试启动模式

<activity
        android:name="com.xyz.MainActivity"
        android:launchMode="singleInstance"

        >