gpt4 book ai didi

android - 如何为我的自定义导航配置 list 文件(任务相关性?)

转载 作者:行者123 更新时间:2023-11-30 04:03:07 24 4
gpt4 key购买 nike

我的应用程序中有一个特殊的导航,我想知道如何正确设置它。

Activity H 是我的应用程序的主屏幕。从这个 Activity 中,我们可以启动 Activity A、B、C 和 D。从 Activity A 中,我们可以启动 A' 以启动 A'',从 Activity B 中,我们可以启动 B',以启动 B'',等等。

问题是,从任何 Activity ,我们都可以转到 Activity H、A、B、C 或 D。但是,当用户启动 A->A'->A''->C,然后转到回到 A,他必须被重定向到 A''。此外,仍然在这个例子中,如果用户按回 A'',他必须被重定向到 A' 而不是 C。如果他再次按回,他必须被重定向到 A,然后再次返回应该将他重定向到H(主屏幕) Activity ,而不是 C!

最后,当用户从 H 键返回时,应用程序(以及所有任务,如果选择的解决方案是创建单独的任务)应该关闭。

其他示例:H -> A -> B -> H -> 返回 -> 应用程序结束

我怎样才能做到这一点?我想过使用这样的任务:

<!-- A-->
<activity
android:name=".A"
android:excludeFromRecents="true"
android:taskAffinity=".A"
android:label="@string/my_A_label">
</activity>
<activity
android:name=".A'"
android:taskAffinity=".A"
android:label="@string/my_A'_label">
</activity>
<activity
android:name=".A''"
android:taskAffinity=".A"
android:label="@string/my_A''_label">
</activity>


<!-- B-->
<activity
android:name=".B"
android:excludeFromRecents="true"
android:taskAffinity=".B"
android:label="@string/my_B_label">
</activity>
<activity
android:name=".B'"
android:taskAffinity=".B"
android:label="@string/my_B'_label">
</activity>
<activity
android:name=".B''"
android:taskAffinity=".B"
android:label="@string/my_B''_label">
</activity>

...

如您所见,我为每个主页创建了任务:A、B、C、D。我不知道这是否是一件好事,因为例如,对于任务,用户可以通过“最后一个任务”选项长按主页按钮来查看所有这些 Activity ,我不希望有这个行为。为此, Activity A、B、C、D(每个任务的根屏幕)具有属性 android:excludeFromRecents="true"。但是现在,另一个问题:当用户单击他的主页按钮并返回到我的应用程序时,他返回到主屏幕,而不是最后启动的 Activity ...

此外,我的第二个例子没有得到尊重。

您有解决所有这些问题的想法吗?

P.S:请不要告诉我改变我的导航系统:-)

编辑:这里是一个流程图,表示所需的后处理。这种行为似乎很正常。在我的案例中有什么不同没有出现在这个图表上。事实上,只有后退按钮被代表。每个上下文 - 由不同的颜色表示 - 可以切换到另一个上下文,而不会覆盖此处描述的后退行为。

back comportment

EDIT2:感谢 David Wasser 的建议,我已经实现了两个完全符合我所描述的行为的类,而不使用 android 任务。也感谢 JoxTraex 的帮助:-) 这是我所做的:我的 Activity A、B、C、D 扩展了 RootActivity,除 H 之外的其他 Activity 扩展了 CustomNavigationActivity。

根 Activity :

import android.content.Intent;

public abstract class RootActivity extends CustomNavigationActivity{

@Override
public void onBackPressed(){

Intent intent = new Intent(this, HomeScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

}

}

自定义导航 Activity :

import android.content.Intent;

public abstract class CustomNavigationActivity extends Activity{

private int actualRequestCode;
private int menuRequestCode = -1;

@Override
protected void onResume(){

if (getIntent().hasExtra("childLaunched")){

Intent intent = new Intent(this, (Class<?>) getIntent().getExtras().get("childLaunched"));
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

}

super.onResume();

}

@Override
public void startActivity (Intent intent) {

this.startActivityForResult(intent, 0);

}

@Override
public void startActivityForResult(Intent intent, int requestCode){

Class<?> targetClass = null;
this.actualRequestCode = requestCode;

if (this.actualRequestCode == this.menuRequestCode){
this.menuRequestCode -= 1;
}

try {
if (intent.getComponent() != null){
targetClass = Class.forName(intent.getComponent().getClassName());
}
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}

if (targetClass == null){
super.startActivityForResult(intent, this.actualRequestCode);
}
else if (!targetClass.equals(Menu.class)){
getIntent().putExtra("childLaunched", targetClass);
super.startActivityForResult(intent, this.actualRequestCode);
}
else{
super.startActivityForResult(intent, this.menuRequestCode);
}

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){

if (requestCode == this.actualRequestCode){
getIntent().removeExtra("childLaunched");
}

}

}

最佳答案

您肯定为此需要不同的任务。如果用户离开应用程序(按主页、接听电话等)并想回来,它会完全搞乱您的导航。如果每个任务的根目录下的 Activity 都有唯一的图标和/或名称,并且所有任务都可以并行运行,则只能使用单独的任务。只有这样你才不会混淆用户。看来你不想要。

看看我对 Activities Stack Issue 的回答

这不是您想要的,但您可能会从这个答案中得到一些想法。如果看完本文后您仍有疑问,请添加评论,我可以为您提供更多帮助。

关于android - 如何为我的自定义导航配置 list 文件(任务相关性?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12173305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com