当前位置: 首页 > 知识库问答 >
问题:

在Android中,如何在活动之间来回传递数据?

盖绪
2023-03-14

我有两个活动,它们应该使用意图相互传递数据。我不确定在哪里放置一些看跌期权和看跌期权。

对于Activity1(MainActivity),我有一个按钮,按下它会创建一个意向,然后将其放入Activity2,然后使用startActivity(意向)启动它。

btn.setOnClickListener((v) -> {
    Intent intent = new Intent(this, Activity2.class);
    intent.putExtra("test", testClass);
    startActivity(intent);
});

然后在Activity2中,我使用getIntent在onCreate()函数中获取该信息。

现在我想做的是在Activity2中有一个按钮,它将数据传递给Activity1,但不一定“启动/显示”活动。

所以我想知道如何做到这一点。

我的想法是有以下类似于以前:

活动2:

btn.setOnClickListener((v) -> {
    Intent intent = new Intent(this, MainActivity.class);
    intent.putExtra("info", info);
});

但我对两件事感到困惑

  1. 我可以在不立即开始活动的情况下完成此操作吗
  2. 在MainActivity中,我在哪里执行getIntent调用来检索此数据

共有3个答案

孙斌
2023-03-14

有几种方法可以实现这一点,具体取决于要传递的数据类型。

如果它是一个完整的类对象,那么就使类解析。你可以在这个网站上复制和粘贴这个类http://www.parcelabler.com/它会自动为你格式化。你所做的就是把它作为一个额外的意图传递。

如果您正在查看需要对其执行操作并将其传递给另一个活动的数据,我建议您使用和意图服务。您可以在服务中接收到意图之前执行某些操作。

如果您希望仅在应用程序中发生XYZ之后才执行某些操作,则使用共享首选项。在任何地方都可以很容易地访问它们。

最后,如果您持续使用需要保持持久性的批量数据,请使用本地数据库存储,并在需要时进行查询。

章安易
2023-03-14

例如,您可以在活动2中创建一个列表,将要传递给活动1的数据添加到该列表中。在启动活动1之前,您从数组中取出值并将它们作为附加值添加到输入中。您可以将数据添加到JSONObject并使用序列化程序,这样您就不必自己添加项目了。

如果您想在不启动的情况下将数据传递给activity1,那么activity1将处理数据,这是不可能的。当您在activity2中时,Activity不会执行任何操作,在这种情况下,您会使用片段。

如果使用片段,则可以将所有数据放入绑定到活动的viewmodel中,而不是每个片段。

陆浩博
2023-03-14

您可以使用start ActivityForResult启动Activity2并接收返回Activity1的结果

活动1

int LAUNCH_ACTIVITY_TWO = 1;
Intent i = new Intent(this, Activity2.class);
i.putExtra("test", testClass);
startActivityForResult(i, LAUNCH_ACTIVITY_TWO);

//onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == LAUNCH_ACTIVITY_TWO) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
    }
}

活动2

Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(Activity.RESULT_OK, returnIntent);
finish();

完整的活动1代码:

 public class MainActivity extends AppCompatActivity {
    public static int LAUNCH_ACTIVITY_TWO = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.btn);

        btn.setOnClickListener((v) -> {
            Intent i = new Intent(this, Activity2.class);
            i.putExtra("test", testClass);
            startActivityForResult(i, LAUNCH_ACTIVITY_TWO);
        });
    }

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

        if (requestCode == LAUNCH_ACTIVITY_TWO) {
            if(resultCode == Activity.RESULT_OK){
                String result= data.getStringExtra("result");
            }
        }
    }
}

完整活动2代码:

public class Activity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(getIntent().getExtras() != null) {
            // Get intent extras from Activity 1
        }
        
        Button btn = (Button) findViewById(R.id.btn);

        btn.setOnClickListener((v) -> {
            Intent returnIntent = new Intent();
            returnIntent.putExtra("result", result);
            setResult(Activity.RESULT_OK, returnIntent);
            finish();
        });
    }
}
 类似资料:
  • 我有两项活动。两者都已实现surfaceview。在第一个活动中,我有一个名为score1的变量,我想将score1中的值传递给第二个活动。 每次我运行应用程序时,它在完成第一个活动后崩溃,并尝试加载第二个活动。在我编写代码以获取第二个活动中的额外意图之前,一切都很好。 我的第一个活动有这样的意图: 在我的第二个活动中,以下代码试图获取score1变量的值: 我不明白为什么每次activity o

  • 我正在开发一个由多个活动组成的Android应用程序,我必须在它们之间传递ab对象,但我不能通过使用意图传递它,因为对象的类没有实现可序列化,我怎么做?我无法修改我的类的源代码。谢谢:)

  • 问题内容: 我看不到有一个双布尔数组传递给另一个活动。我使用putExtra,当我检索它并将其投射到时,它指出它无法投射并崩溃。Boolean []有效。 我该如何在两次活动之间传递a ? 问题答案: 如果您绝对需要boolean [] [](并且仅通过传递给Parcel.writeBooleanArray()的平面boolean []数组就无法做到这一点),那么执行此操作的正式方法是将其包装在P

  • 我试图在我的android应用程序中的两个活动之间传递数据,我想使用HashMap(我不想使用Intent)。以下是我的代码: DataHolder.java 在第一个活动中设置值 在其他活动中获得价值 当我用它在activity1到activity2之间传递数据时,它会起作用,但在那之后,当在activity2到activity3之间传递数据时,返回null,因此强制转换为(整数)会导致错误。在

  • 假设我有一个列表活动,当你点击列表上的一个项目时,它会带你进入一个新的活动,其中包含该列表项目的更多详细信息。所有这些信息都是使用REST服务获取的。在我使用Reform将数据存储到一个对象中并将其存储到两个活动都可以访问的和单例类中之前,这样当选择一个列表项时,它只需要id并转到单例以获取正确的数据,然后在新活动中使用它。这是正确的Android实践吗?此外,我想知道是否最好让列表活动转到一个新

  • 我正在尝试使用从Activity3检索到Activity1的值。这是我的流程: 活动1调用活动2→ Activity2.finish(),调用Activity3→ 活动3.doSomethingAndGetValue()→ 活动3.finish()→ 活动1.useDoSomethingAndGetValue(); 我找不到将值从Activity3发送回Activity1的方法;即使使用start