Android按钮点击后移至第一个活动
我正在写一个应用程序,我正在处理4个活动,比如说A,B,C和D.活动A调用B,B调用C,C调用D.在每个活动中,我有一个名为“home”按钮。 当用户点击任何B,C,D活动中的主页按钮时,应用程序应该返回到A活动屏幕?
在这种情况下如何模拟“home”按钮?
button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(new Intent(D.this, A.class)); } });
使用android:launchMode="singleTask"
声明A的清单。 这样,当您从其他活动中调用startActivity()
,并且A已经在运行时,它就会把它带到前面。 否则,它会启动一个新的实例。
唯一的问题,我看到使用android:launchMode="singleTask"
是每当你最小化应用程序,并再次按应用程序图标启动应用程序,然后应用程序从头开始,并没有获得其状态。 所以我选择使用
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
这将只保留一个实例,并清除所有的活动。
Intent intent = new Intent( context, MyActivity.class ); intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP ); current_activity.startActivity( intent );
这对我有用
Intent intent = new Intent(D.this, A.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
在清单中:
android:name=".A" android:launchMode="singleTask"
我正在使用https://github.com/greenrobot/EventBus这个。 在根活动中,您必须订阅活动
。EventBus.getDefault()寄存器(本);
然后你必须定义事件回调
public void onEvent(LogoutEvent event) { // your implementation logout(); }
和注销按钮监听器必须有这样的代码:
finish(); // you must finish previous activity EventBus.getDefault().post(new LogoutEvent());
就这样
首先,我不能相信Android没有一个简单的相当于iOS poptorootviewcontroller。
使用intent和startactivity的问题是,据我所知,如果使用异步网络请求加载数据和布局接口,它将重新创建问题的根活动。 这可能会有不愉快的视觉效果。
以下是我在我的friendfolder项目中使用的创造性解决方案:
创建一个全局布尔值: public boolean myBool = true;
在MyApplication类中执行此操作,并在清单中注册该类:
活动A是根,在onResume中做这个:
if(((MyApplication) this.getApplication()).myBool == false) { if(isTaskRoot()) { ((MyApplication) this.getApplication()).myBool = true; } else { finish(); } }
在活动A的顶部,每一个活动都把这个代码放在:
@Override public void onResume() { super.onResume(); if(((MyApplication) this.getApplication()).myBool == false) { finish(); } } @Override public boolean onSupportNavigateUp(){ ((MyApplication) this.getApplication()).myBool = false; finish(); return true; }
你甚至可以把它放在活动A中,如果你将A的其他实例放在根A的顶部。onSupportNavigateUp就是向上按钮。 如果使用您自己的按钮,请将此方法替换为其他方法。
现在,当您将一些活动堆叠在A之上时,按下向上按钮,顶部活动将结束,系统将在堆栈中的下面的活动中调用onresume,并完成。 这将在一个链中一路返回到根A.
科特林
fun Context.popToRoot() { val intent = Intent(this, MainActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP startActivity(intent) }
将MainActivity更改为主要活动。
在任何活动只是打电话:
this.popToRoot()
- permissionsdispatcher和多个@ NeedsPermission与kotlin
- 找不到引用类kotlin.internal.annotations.AvoidUninitializedObjectCopyingCheck
- 如何在RxJava2中用重试运算符记住状态
- 如何在我的Kotlin类中创建一个匿名接口实现并使用它?
- 使用Kotlin无法反序列化Gson的JSON(仅适用于Android KitKat,可能更低)
- Kotlin在Android Studio上的错误<>
- Android中的Kotlin协程:为什么要使用Anko中的bg()而不是async()?
- Kotlin在variables声明之后分配委托
- 使用Kotlin Anko拍摄照片并显示结果的最佳方法是什么?