我已经在这里问了几次这个问题,但仍然没有足够的信心开始把东西扔进我的代码中,因为我害怕我会破坏它已有的功能。
我想要做的是与我可以发送/接收数据的设备建立蓝牙连接,并且能够从多个不同的活动访问它。我知道可以使用Intent,但任何人都可以尝试解释Intent是如何工作的吗?
我不明白如何从一个Activity开始,如何在该Activity中构建一个对象,然后结束它,并且仍然拥有该对象。当我在下面的Activity中调用intent时,如何访问它?
我找不到Activity的示例代码,其中自定义对象通过intent传递,在另一个Activity中打开,然后再次通过另一个Activity,依此类推。我能找到的就是字符串,int的东西,似乎这些方法是针对特定对象的硬编码。
非常感谢任何帮助,谢谢。
答案 0 :(得分:2)
如果要将自定义对象从Activity传递给另一个,则您的对象必须实现Parcelable接口。
Here你可以找到一个实现Parcelable的对象的例子。 获得此对象的实例后,可以将其添加到intent中并将其传递给其他活动。
假设您有2项活动:A和B. 如果要将自定义对象从A发送到B,请尝试将parceable对象放入intent中,然后将其返回到Activity B中。
// Activity A
Notebook myNotebook = new Notebook(); // the "Parcelable" object
Intent intent = new Intent(A.this, B.class);
intent.putExtra("object", myNotebook);
startActivityForResult(intent);
// Activity B
// in onCreate method
Notebook notebook = intent.getParcelableExtra("object");
答案 1 :(得分:1)
有一个很好的理由你没有找到转移复杂对象的好例子:你不要想那么多。可以使用intent传递额外的任何对象,声明要传输的类作为实现Serializable或Parcalable。
但是 - 除非你有充分的理由,否则不建议这样做。 有无限的方法来创建“交叉活动”对象(数据库,singeltones,服务..),并且在意图中传递复杂的对象是繁重的操作。这也是令人沮丧的表演。
无论如何 - 如果你想要这样做,就是这样:
这是如何传递可谓的对象:
Intent intent = new Intent();
intent.putExtra(name, someInstanceOfClassWhichImplementsSerializableInterface);
这是如何在其他活动上实现它:
getIntent().getSerializableExtra(name);
关于在完成活动后你不理解对象仍然存在的问题 - finish()活动不会触发干扰器!!!,但会触发onDestoy()回调 。系统决定何时正确调用活动分散注意力,即使是分心者 - 它也不会阻止Intent对象保持活力 - 因为没有人说你的活动是唯一一个持有它的人。系统保留的意图参考,用于将其传递给随之打开的新活动。
答案 2 :(得分:1)
使用intent可以发送序列化对象,就像将对象转换为字节流一样。如果要按原样发送对象,可以使用处理程序。 e.g。