簡體   English   中英

如何完成onBackPressed的主要活動?

[英]How to finish Main Activity onBackPressed?

我正在為我的應用程序設置主題。 主題設置得很好。 我有兩個活動是主要活動,另一個是設置活動。

從設置活動設置主題時,我已將Main Activity onBackPressed稱為設置活動。 這樣就出現了更改的主題。

但是,如果我按回主活動,它將再次顯示具有上一個主題的主活動,然后第二次關閉該應用程序。

它不應再次顯示以前的主題。 如果要立即按下,我想完成主要活動。

我嘗試在主要活動上調用finish 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); ---- on主要活動的創建,因此我已經從設置活動中再次開始了主要活動。

或者完成設置活動后如何應用主題?

謝謝..

在“設置活動”中按下后,只需完成“設置活動”即可。 因此它將轉到主要活動。

因此,將下面的代碼放在重寫方法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();
}

它可以用很多方法來完成...

在您的主要活動中:

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"/>

這樣嘗試

{//.............
 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"

        >

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM