* UPDATE !关于此链接 - Android close app on back button - 我已尝试过答案中的代码,但一切都没有改变。 我认为我的问题出现在活动A中。当用户打开我的应用程序时,活动A检查是否在首选项中有值。如果缺少值,则活动A不会将用户引用到活动B.如果存在值,则活动A将用户引用到活动B.因此,这是一个恶性循环: 用户打开我的应用程序--->他来到活动A --->活动A检查首选项中的值--->活动A将用户引用到活动B --->当用户点击后退按钮时,活动A正在打开--->活动A将用户引用到活动B --->等等
请帮我解决我的问题)
我有两个活动--A和B. 活动A 有一个按钮,当我点击它时,它会引导我进入设置。但如果它是设置中的值,则活动A使用Intent将我引用到活动B. 活动B 是包含内容的活动,当我按后退按钮时,活动B重新启动。但是,当我点击后退按钮时,我想关闭应用程序。我怎么能这样做?
我的代码:
AActivity.java:
public class AActivityextends AppCompatActivity implements View.OnClickListener {
Button btn_select;
SharedPreferences sp;
/**
* Called when the activity is first created.
*/
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
btn_select = (Button) findViewById(R.id.btn_select);
sp = PreferenceManager.getDefaultSharedPreferences(this);
String select_class = sp.getString("select_class", "");
if (select_class.equals("") || select_class.equals("0")) {
btn_select.setVisibility(View.VISIBLE);
}
}
protected void onResume() {
String select_class = sp.getString("select_class", "");
tvInfo.setText(select_class);
if (select_class.equals("") || select_class.equals("0")) {
btn_select.setVisibility(View.VISIBLE);
} else {
btn_select.setVisibility(View.INVISIBLE);
Intent intent = new Intent(this, BActivity.class);
startActivity(intent);
}
super.onResume();
}
}
BActivity.java:
public class BActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timetable);
sp = PreferenceManager.getDefaultSharedPreferences(this);
String select_class = sp.getString("select_class", "");
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new MondayFragment(), "ПН");
adapter.addFragment(new TuesdayFragment(), "ВТ");
adapter.addFragment(new WednesdayFragment(), "СР");
adapter.addFragment(new ThursdayFragment(), "ЧТ");
adapter.addFragment(new FridayFragment(), "ПТ");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
Intent intent = new Intent(BActivity.this, SettingsActivity.class);
intent.putExtra("fwflag","from_menu_item");
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
}
我的AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.x.x">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<activity android:name=".AActivity"
android:theme="@style/MyMaterialTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SettingsActivity"
android:theme="@style/MyMTheme.Base" />
<activity android:name=".BActivity"
android:theme="@style/MyMTheme">
</activity>
</application>
我的活动C代码:
public class CActivity extends AppCompatActivity {
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.toolbar);
toolbar = (Toolbar) findViewById(R.id.toolbar);
//toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
getFragmentManager().beginTransaction().replace(R.id.fragment_container,
new PrefFragment()).commit();
}
public class PrefFragment extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref);
Intent intent = getIntent();
String flag_from_where = intent.getStringExtra("fwflag");
if (flag_from_where.equals("from_btn_select")) {
PreferenceScreen main = (PreferenceScreen) findPreference(getString(R.string.pref_screen));
main.onItemClick(null, null, 0, 0);
} else if (flag_from_where.equals("from_menu_item")) {
}
final ListPreference list = (ListPreference) getPreferenceScreen().findPreference("listpref");
list.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
Intent intent = new Intent(CActivity.this, BActivity.class);
startActivity(intent);
finish();
return true;
}
});
}
}
}
答案 0 :(得分:2)
您需要在致电开始新活动后立即“完成”每项活动。
因此,在每finish()
之后,您应在其下方添加Warning: a promise was rejected with a non-error: [object Response]
at http://localhost:9000/scripts/vendor-bundle.js:39700:20
at Array.reduce (native)
at applyInterceptors (http://localhost:9000/scripts/vendor-bundle.js:39696:33)
at processResponse (http://localhost:9000/scripts/vendor-bundle.js:39688:12)
at http://localhost:9000/scripts/vendor-bundle.js:39603:18
From previous event:
at http://localhost:9000/scripts/vendor-bundle.js:39602:24
From previous event:
at HttpClient.<anonymous> (http://localhost:9000/scripts/vendor-bundle.js:39590:64)
at HttpClient.fetch (http://localhost:9000/scripts/vendor-bundle.js:39574:23)
at AuthService.login (http://localhost:9000/scripts/app-bundle.js:126:30)
at Login.login (http://localhost:9000/scripts/app-bundle.js:190:30)
at CallScope.evaluate (http://localhost:9000/scripts/vendor-bundle.js:24067:21)
at Listener.callSource (http://localhost:9000/scripts/vendor-bundle.js:27508:42)
at http://localhost:9000/scripts/vendor-bundle.js:27532:24
at HTMLDocument.handleDelegatedEvent (http://localhost:9000/scripts/vendor-bundle.js:25721:11)
。
那应该照顾好你的问题。