Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓:有可能在前面传递几个活动吗?_Java_Android_Android Intent - Fatal编程技术网

Java 安卓:有可能在前面传递几个活动吗?

Java 安卓:有可能在前面传递几个活动吗?,java,android,android-intent,Java,Android,Android Intent,例如:我有5项活动: 活动A-->活动B-->活动C-->活动D-->活动E 活动A必须按顺序依次进行活动B、C、D、E 我想将活动A中的意图传递给活动E,而不通过B、C、D传递 有可能吗 我在活动A中的过往意图目前: fab = (FloatingActionButton) rootView.findViewById(R.id.fabAddConList); fab.setOnClickListener(new View.OnClickListener() {

例如:我有5项活动:

活动A-->活动B-->活动C-->活动D-->活动E

活动A必须顺序依次进行活动B、C、D、E

我想将活动A中的意图传递给活动E,而不通过B、C、D传递

有可能吗

我在活动A中的过往意图目前:

fab = (FloatingActionButton) rootView.findViewById(R.id.fabAddConList);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent createContactList = new Intent(context, ActivityB.class);
                createContactList.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                createContactList.putExtra("userid", userID);
                startActivity(createContactList);
            }
        });
 Intent lastIntent = getIntent();
        userid = lastIntent.getStringExtra("userid");
我目前在活动E中的接收意图:

fab = (FloatingActionButton) rootView.findViewById(R.id.fabAddConList);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent createContactList = new Intent(context, ActivityB.class);
                createContactList.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                createContactList.putExtra("userid", userID);
                startActivity(createContactList);
            }
        });
 Intent lastIntent = getIntent();
        userid = lastIntent.getStringExtra("userid");
------------------------------------编辑------------------------------------------


根据我在这篇文章中的代码,我将活动A中的意图传递给活动B,而不是E,因为我想在单击按钮时转到活动B。但是,如果不将“用户ID”传递给活动B并将其保存到活动E之前,我如何才能转到活动B?

是的,只要目的不明确,所有内容都将以目的自始至终传递。每当您想要清理意图数据时,可以调用

getIntent().removeExtra("key"); 
如果你想表达你的意图。你可以自己做

Intent newIntent = new Intent(receivedIntent);

一种选择是使用公共静态变量(或单例)存储一个值,以便稍后由另一个活动读取。通常,您不希望像这样使用静态,但这可能是最容易做到的

这是Java中静态变量的基本应用。声明具有要保留状态的新类:

public class State {
    public static String value;
}
在活动A中:

State.value = "value that you want to read in activity E"
在活动E中:

String v = State.value;

否,如果未首先接收到
意图,则不可能让
活动
意图
传递到序列中的下一个
活动
。还有什么方法可以传递呢

在您的情况下,考虑编写<代码>活动< <代码> E的信息> <代码> SydPrase。它们使用键值对来存储数据,就像intent一样,请参见此


顺便说一句,从安全角度来看:至少在某些版本的android中,与
startActivity()
一起使用的
Intent
对你的应用程序来说不是私有的。因此,小心不要使用
startActivity()

传递敏感数据。不,您必须传递所有活动的值

除此之外,您还可以使用
SharedReferences
活动A
中存储值,并在
活动E
中获取该值。查阅参考资料

另一种方式是静态变量,在A中获取
公共静态
变量,并从
活动E

在活动A中

public static String yourVariable="value";
在活动E中,使用
A.yourVariable

对于我的应用程序,用户必须在中通过活动A到活动E 序列用户不能直接从活动A转到活动E 没有通过B、C和D。我还能将意图从A传递到E吗 当这个过程仍然按照A,B,C,D,E的顺序进行时

您必须按顺序传递所有活动的值,然后必须使用intent传递所有活动的值。

另类


使用
首选项
存储您的值或
静态变量

您的问题是什么?我的意思是你面临着任何问题。@androidnoobdev嗨,我的问题是我无法将意图传递到所有活动B、C和D。因此,我试图找出我是否可以直接从A传递到E,而不必传递到B、C和D。@JothanCamos是的,你可以直接调用活动E。这取决于你的应用程序用例。如何传递数据或用户将如何/何时看到屏幕。我认为在到达活动E之前,只能将数据从一个意图传递到另一个意图,以此类推。但理想的解决方案是将其存储在持久数据(共享首选项)中,并在需要时使用。如果您认为共享首选项是一种开销,则更简单的方法是将其存储在应用程序子类(或任何单例类)中。@androidnoobdev对于我的应用程序,用户必须按顺序执行活动A到E。用户不能直接从活动A到活动E而不通过B、C和D。当流程仍在按顺序进行(如A、B、C、D、E)时,我是否仍能将意图从A传递到E?嗨,我在哪里添加这行代码?由于当前意图未通过我当前的代码,请检查您是否正在创建新的意图实例或获取现有意图的引用并单独传递。最好将startActivity的呼叫放在每次呼叫的意图上,告诉你如何传递意图。这将有助于从头到尾理解每个调用;最好像这样从接收到的意图中获取现有意图。意向新意向=新意向(接收内容);它会造成内存泄漏问题。不要给出临时解决方案。如果它只是一个短字符串或整数,那就不是真正的泄漏。泄漏是指对象的保留时间超过其预期寿命。在这里,我们完全希望基本字符串对象在活动之外存在。我该如何做到这一点?你能举个例子吗?根据我在帖子中的代码,我将意向传递给活动B而不是E,因为我想在单击按钮时转到活动B。但是我如何才能转到活动B,而不将“userid”传递给活动B,并将其保存到活动E?这是静态的基本Java用法。我提出了最低限度的代码。如果你不理解Java中的静态成员,你应该学习它,这样你就知道你在做什么。你能举个例子吗?