下面列出了android.app.FragmentManager#getBackStackEntryCount ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 1) {
fm.popBackStackImmediate();
SettingActivity.this.setTitle(R.string.title_activity_setting);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
} else {
clearMemory();
finish();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (MenuDoubleTabUtil.shouldIgnoreTap()) {
return false;
}
switch (item.getItemId()) {
case android.R.id.home:
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
try {
fm.popBackStack();
} catch (IllegalStateException e) {
Log.w(Config.LOGTAG, "Unable to pop back stack after pressing home button");
}
return true;
}
break;
case R.id.action_scan_qr_code:
UriHandlerActivity.scan(this);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean dispatchKeyEvent(final KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_BACK:
FragmentManager fm = getFragmentManager();
int cnt = fm.getBackStackEntryCount();
if (cnt <= 1) {
finish();
return false;
} else {
currentPage--;
}
break;
default:
break;
}
}
return super.dispatchKeyEvent(event);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}
return true;
case ch.haclyon.driveimageview.example.R.id.menu_item_help:
AboutDialog aboutDialog = new AboutDialog(this);
aboutDialog.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed() {
// If the drawer is open, back will close it
if (mDrawerLayout != null && mDrawerLayout.isDrawerOpen(Gravity.START)) {
mDrawerLayout.closeDrawers();
return;
}
// Otherwise, it may return to the previous fragment stack
FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager.getBackStackEntryCount() > 0) {
fragmentManager.popBackStack();
} else {
// Lastly, it will rely on the system behavior for back
super.onBackPressed();
}
}
private void changeFragment(Fragment newFragment, FragmentsAvailable newFragmentType, boolean withoutAnimation) {
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
/*if (!withoutAnimation && !isAnimationDisabled && currentFragment.shouldAnimate()) {
if (newFragmentType.isRightOf(currentFragment)) {
transaction.setCustomAnimations(R.anim.slide_in_right_to_left,
R.anim.slide_out_right_to_left,
R.anim.slide_in_left_to_right,
R.anim.slide_out_left_to_right);
} else {
transaction.setCustomAnimations(R.anim.slide_in_left_to_right,
R.anim.slide_out_left_to_right,
R.anim.slide_in_right_to_left,
R.anim.slide_out_right_to_left);
}
}*/
if (newFragmentType != FragmentsAvailable.DIALER
&& newFragmentType != FragmentsAvailable.CONTACTS_LIST
&& newFragmentType != FragmentsAvailable.CHAT_LIST
&& newFragmentType != FragmentsAvailable.HISTORY_LIST) {
transaction.addToBackStack(newFragmentType.toString());
} else {
while (fm.getBackStackEntryCount() > 0) {
fm.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
transaction.replace(R.id.fragmentContainer, newFragment, newFragmentType.toString());
transaction.commitAllowingStateLoss();
fm.executePendingTransactions();
currentFragment = newFragmentType;
}
@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
mCurrentPath = FileUtils.cutLastSegmentOfPath(mCurrentPath);
updateTitle();
} else {
setResult(RESULT_CANCELED);
super.onBackPressed();
}
}
@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
mCurrentPath = FileUtils.cutLastSegmentOfPath(mCurrentPath);
updateTitle();
} else {
setResult(RESULT_CANCELED);
super.onBackPressed();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
finish();
}
return true;
case R.id.action_settings:
launchSettingsActivity();
return true;
case R.id.action_view_on_github:
launchGitHubPage();
return true;
case R.id.action_help:
launchHelpPage();
return true;
case R.id.action_donate:
launchDonatePage();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (MenuDoubleTabUtil.shouldIgnoreTap()) {
return false;
}
switch (item.getItemId()) {
case android.R.id.home:
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
try {
fm.popBackStack();
} catch (IllegalStateException e) {
Log.w(Config.LOGTAG, "Unable to pop back stack after pressing home button");
}
return true;
}
break;
case R.id.action_scan_qr_code:
UriHandlerActivity.scan(this);
return true;
case R.id.action_check_updates:
if (xmppConnectionService.hasInternetConnection()) {
openInstallFromUnknownSourcesDialogIfNeeded(true);
} else {
ToastCompat.makeText(this, R.string.account_status_no_internet, Toast.LENGTH_LONG).show();
}
break;
case R.id.action_invite_user:
inviteUser();
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
finish();
}
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
closeDrawer();
// Otherwise, it may return to the previous fragment stack
FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager.getBackStackEntryCount() > 0) {
fragmentManager.popBackStack();
} else {
// Lastly, it will rely on the system behavior for back
super.onBackPressed();
}
}
public void showChatRoomCreation(
Address peerAddress,
ArrayList<ContactAddress> participants,
String subject,
boolean encrypted,
boolean isGroupChatRoom,
boolean cleanBackStack) {
if (cleanBackStack) {
FragmentManager fm = getFragmentManager();
while (fm.getBackStackEntryCount() > 0) {
fm.popBackStackImmediate();
}
if (isTablet()) {
showEmptyChildFragment();
}
}
Bundle extras = new Bundle();
if (peerAddress != null) {
extras.putSerializable("RemoteSipUri", peerAddress.asStringUriOnly());
}
extras.putSerializable("Participants", participants);
extras.putString("Subject", subject);
extras.putBoolean("Encrypted", encrypted);
extras.putBoolean("IsGroupChatRoom", isGroupChatRoom);
ChatRoomCreationFragment fragment = new ChatRoomCreationFragment();
fragment.setArguments(extras);
changeFragment(fragment, "Chat room creation", true);
}
@Override public void onBackPressed() {
FragmentManager fragmentManager = getFragmentManager();
if (mDrawerLayout.isDrawerOpen(mNavDrawer)) {
mDrawerLayout.closeDrawers();
} else if (fragmentManager.getBackStackEntryCount() != 0) {
fragmentManager.popBackStackImmediate();
configureFragment(
fragmentManager.findFragmentById(R.id.content_frame)
);
} else {
super.onBackPressed();
}
}
private boolean popFragment() {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
return true;
}
return false;
}
private boolean popFragment() {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
return true;
}
return false;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
} else {
NavUtils.navigateUpFromSameTask(this);
}
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean canGoBack(BaseActivity activity) {
FragmentManager fm = activity.getFragmentManager();
return fm.getBackStackEntryCount() > 0;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (mIsInReplyMode) {
showDiscardReplyDialog();
return true;
}
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
finish();
}
break;
case R.id.action_open_post:
if (mUrl != null) {
if (mChromeCustomTabsHelper != null) {
// build CustomTabs UI
CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();
Utils.setupIntentBuilder(intentBuilder, this, prefs);
ChromeCustomTabsHelper.openCustomTab(this, intentBuilder.build(),
Utils.validateAndParseUri(mUrl, mPostId), null);
} else {
Intent urlIntent = new Intent(Intent.ACTION_VIEW);
urlIntent.setData(Utils.validateAndParseUri(mUrl, mPostId));
startActivity(urlIntent);
}
}
break;
case R.id.action_bookmark:
changeBookmarkState();
break;
case R.id.action_upvote:
vote(mPostId, Constants.VOTE_UP);
break;
case R.id.action_reply:
if (!Utils.isOnline(this)) {
Utils.showLongToast(this, R.string.no_connection_prompt);
return false;
}
switchReplyMode(true, mPostId);
break;
case R.id.action_refresh:
CommentsFragment commentFragment =
(CommentsFragment) getFragmentManager().findFragmentByTag(Constants.FRAGMENT_TAG_COMMENT);
commentFragment.getPresenter().refresh();
break;
case R.id.action_share:
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
String commentUrl = "https://news.ycombinator.com/item?id=" + mPostId;
sendIntent.putExtra(Intent.EXTRA_TEXT, commentUrl);
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getString(R.string.share_link_to)));
break;
case R.id.action_typography:
if (!mWindow.isWindowShowing()) {
mWindow.show();
} else {
mWindow.dismiss();
}
break;
}
return super.onOptionsItemSelected(item);
}
protected void changeFragment(Fragment fragment, String name, boolean isChild) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (transaction.isAddToBackStackAllowed()) {
int count = fragmentManager.getBackStackEntryCount();
if (count > 0) {
FragmentManager.BackStackEntry entry =
fragmentManager.getBackStackEntryAt(count - 1);
if (entry != null && name.equals(entry.getName())) {
fragmentManager.popBackStack();
if (!isChild) {
// We just removed it's duplicate from the back stack
// And we want at least one in it
transaction.addToBackStack(name);
}
}
}
if (isChild) {
transaction.addToBackStack(name);
}
}
if (getResources().getBoolean(R.bool.hide_bottom_bar_on_second_level_views)) {
if (isChild) {
if (!isTablet()) {
hideTabBar();
}
} else {
showTabBar();
}
}
Compatibility.setFragmentTransactionReorderingAllowed(transaction, false);
if (isChild && isTablet()) {
transaction.replace(R.id.fragmentContainer2, fragment, name);
findViewById(R.id.fragmentContainer2).setVisibility(View.VISIBLE);
} else {
transaction.replace(R.id.fragmentContainer, fragment, name);
}
transaction.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();
}