我正在做一个聊天项目.当从GCM收到推送通知时,我需要导航到聊天联系人列表并清除以前打开的应用程序活动.
我的MainActivity中有一个"开始"按钮.如果我单击此按钮,我将转到下一个活动(InfoActivity).现在,如果我点击按钮,我想从BackStack中删除MainActivity.我试过这个:
View.OnClickListener startButtonListener = new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, InfoActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
}
};
Run Code Online (Sandbox Code Playgroud)
但是这不会从BackStack中删除MainActivity,它会从BackStack中删除InfoActivity.
我知道我可以将标志插入AndroidManifest.但这对我来说是不可能的,因为如果我从MainActivity转到PreferencesActivity并使用AndroidManifest中的标志,那么如果我从PreferencesActivity返回到MainActivity,则会删除MainActivity.
所以我想从BackStack中删除MainActivity,如果我点击按钮Start.
我是android开发的新手.我需要知道的最大内存大小的堆栈中的机器人
,我想知道有多少活动的Android应用程序可以被存储在堆栈中
谢谢
我使用AccountManager在我的应用程序中验证用户
我知道我可以调用getAuthTokenByFeatures,如果没有为我的特定accountType设置帐户,它会启动我的LoginActivity,这正是我想要的,
我有一个BaseActivity,它在onCreate方法上执行,但是在启动LoginActivity时,旧活动仍然在堆栈上,因此通过按后退按钮,用户可以返回到上一个活动是我不想要的行为,我在BaseActibity.onCreate上的代码如下
AccountManager manager = AccountManager.get(getBaseContext());
manager.getAuthTokenByFeatures(
AccountGeneral.ACCOUNT_TYPE,
AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS,
null,
this,
null,
null,
new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
Bundle bnd = null;
try {
bnd = future.getResult();
final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN);
LOGV(TAG, "GetTokenForAccount Bundle is " + bnd);
} catch (Exception e) {
LOGE(TAG, "exception while getAuthTokenByFeatures", e);
}
}
}
, null);
Run Code Online (Sandbox Code Playgroud)
问题是:如何禁用该返回行为?如果是我以编程方式调用LoginActivity,我只需在BaseActivity上调用finish()
这是我在同一件事上的第二篇文章,我还在等人指导我.我面临的问题可能非常简单,简而言之,我有这个ListFragment填充列表调用webservice,这很好.当用户选择任何项目时,我替换另一个片段并将其添加到BackStack
问题从这里开始,它弹出ListFragment但它总是空的或空白.但我已经以各种可能的方式检查了日志,发现数据存在,出于某种原因,列表保持空白.请帮帮我一个人......
在我使用的MainActivity中DrawerItemCustomAdapter,这就是我替换片段的方式
private void selectItem(int position) {
android.support.v4.app.Fragment fragment = null;
switch (position) {
case 0:
{
fragment = new EventFragment();
}
break;
case 1:
fragment = new ScheduleFragment();
break;
case 2:
fragment = new NewsFragment();
break;
case 3:
fragment = new TeamFragment();
break;
case 4:
fragment = new VenueFragment();
break;
case 5:
fragment = new NewsFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); …Run Code Online (Sandbox Code Playgroud) android android-fragments android-listfragment back-stack android-nested-fragment
我有活动 A -> B -> C -> D。如何从活动 D 中打开现有的 B,清除 C 和 D?我最终会得到 A -> B。我不想重新创建一个新的 B。
我使用下面的代码检查最后Fragment一个Activity以弹出一个对话框
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if there is only one fragment
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
DlgUniversalError.shallIQuit(this, getApplicationContext()
.getResources().getString(R.string.doYouWantToQuit),
getSupportFragmentManager());
return false;
}
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)
现在假设我有一套Activitys.如何Activity判断Activity堆栈中是否为最后一个,并弹出退出对话框?
android android-lifecycle android-activity back-stack android-task
我有两个片段,第一个称为 Summer Jobs Fragment,其中包含项目列表,第二个称为 Summer Jobs Details Fragment,其中包含每个项目的详细信息。我试图设置回溯,以便当我从 Summer Jobs Detail Fragment 按下后退按钮时,我会回到 Summer Jobs Fragment。
这是我从 SJF 到 SJDF 初始转换的代码:
public void onItemClick(
AdapterView<?>parent,View view, int position, long id) {
SummerJobDetailsFragment.mMyAppsBundle.
putInt("value", position);
SummerJobDetailsFragment fragment =
new SummerJobDetailsFragment();
FragmentManager fragmentManager =
getFragmentManager();
list.setVisibility(parent.INVISIBLE);
fragmentManager.beginTransaction().replace(R.id.displayjobs_detailed, fragment).
addToBackStack( "tag" ).commit();
}
Run Code Online (Sandbox Code Playgroud)
这是我在主文件中修改 OnBackPressed() 的方法:
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (getFragmentManager().getBackStackEntryCount() > 0 ) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我从 SJDF 按下返回键时,我得到一个空白屏幕:
我的应用程序有两个活动,说MainActivity和SecondActivity。主要活动被声明为,android:launchMode="singleInstance"并且其方向始终为portrait。第二项活动总是有landscape方向的。
在某些设备中,一切正常,在任务管理器中只有一个应用程序实例,但是在某些设备(例如Samsung S7)中,当我启动时SecondActivity,在任务管理器中将有两个应用程序实例,如下图所示:
我的猜测是,什么是错用launchMode的MainActivty,但我需要它singleInstance。有什么建议吗?
编辑:
清单中的MainActivity:
<activity
android:name=".Activities.MainActivity"
android:screenOrientation="portrait"
android:launchMode="singleInstance"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
第二:
<activity
android:name=".Activities.SecondActivity"
android:screenOrientation="landscape" />
Run Code Online (Sandbox Code Playgroud)
启动代码:
Intent intent = new Intent(getActivity(),
intent.putExtra("VideoUri", filmGet.getOutput().getData().getFilmTrailer());
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
如果有帮助,我SecondActivity将从片段开始。
我有3个活动:A,B,C.
我希望活动的工作方式如下:
一个startActivityForResult B; B可以启动C或将结果发送给A; C可以返回B或将结果发送给A.
当B将结果发送给A时,必须从Backstack中删除B. 当C将结果发送到A时,必须从Backstack中删除B和C.
我无法从C向A发送结果.这意味着A必须重新发送(未重新发送),并且必须调用onActivityResult()来处理结果:
我已尝试使用此代码,但重新创建了A并且未调用onActivityResult()!
public class C extends Activity{
sendResultToA(){
Intent i = new Intent(getActivity(), A.class);
i.putExtra("dataBean", dataBean);
i.putExtra("args", "save");
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
getActivity().setResult(Activity.RESULT_OK, i);
startActivity(i);
}
}
Run Code Online (Sandbox Code Playgroud)
有什么想法可以解决这个问题?谢谢