![](/img/trans.png)
[英]How to finish() an activity with SoftKeyboard visible with 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.