如何完成主要活动onBackPressed?

时间:2016-02-16 07:38:46

标签: java android android-activity activity-finish onbackpressed

我正在为我的应用程序设置主题。主题设置得很好。我主要活动有两项活动,其他活动是设置活动。

当我从设置活动设置主题时,我调用了主要活动onBackPressed设置活动。所以改变了的主题出现了。

但是,如果我按下主要活动,它会再次显示前一主题的主要活动,并在第二次关闭应用程序。

它不应该再显示以前的主题。如果立即按下,我想完成主要活动。

我试过调用完成onBackPressed的主要活动,但它没有用。

怎么办?

主要活动

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();
    }
}

编辑:

如果我刚刚完成设置活动,则更改的主题剂量不会应用于主要活动。正如我所说的Theme.onActivityCreateSetTheme(this); ---- onCreate主要活动,所以为此我已经从设置活动再次启动了主要活动。

或者,如果我完成设置活动,我该如何应用主题?

谢谢..

4 个答案:

答案 0 :(得分:4)

在“设置活动”中按下后,只需完成“设置活动”。 所以它将转到主要活动。

所以把下面的代码放在覆盖方法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();
}

答案 1 :(得分:2)

它可以通过很多方式完成......

在您的主要活动中:

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

在“设置活动:

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

或者在清单文件中使用 android:noHistory =“true”

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

答案 2 :(得分:0)

试试这个

{//.............
 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();
        }
    }

答案 3 :(得分:0)

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

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

        >