Dus*_*Dus 11 android android-intent android-activity
我想将第1个活动的界面传递给第2个活动.
我想从第二个活动的界面启动方法,这将影响第一个活动.
我很清楚,不使用onActivityResult机制非常过分,并且它可能不是很好的编程,但请跟我说.
这是问题 - 我的界面无法实现Serializable/Parcelable,因为接口无法实现另一个类.
这是我的界面:
public interface ITest {
void onSuccess(String text);
}
Run Code Online (Sandbox Code Playgroud)
但是,我不能用这个界面开始我的活动,因为它不是Parcelable.
intent.putExtra("testInterface", new ITest() {
@Override
void onSuccess(String text) {
}
}
Run Code Online (Sandbox Code Playgroud)
显然,我收到一个编译错误:
Cannot resolve method 'putExtra(java.lang.String, ITest)'
Dav*_*ser 12
你不能"通过一个接口"."界面"是一个抽象的东西.你想传递的是该接口的具体实现,即:一个对象(碰巧实现你的接口).当您实例化"界面"时(在您的示例中,如下所示:
intent.putExtra("testInterface", new ITest() {
@Override
void onSuccess(String text) {
}
}
Run Code Online (Sandbox Code Playgroud)
您实际上正在创建实现该接口的匿名类的实例ITest.要通过这个,Intent你需要让这个类也实现Parcelable或Serializable.
但是,即使你这样做,它也无法解决你的问题.您需要了解的是,您不能通过将对象(实例)作为"额外"放在一个对象中来传递它们Intent.当你这样做时,Android实际上序列化然后反序列化对象,以便最终得到2个对象,一个是原始的序列化/反序列化副本.
如果您想ActivityB与之通信ActivityA,则需要使用其他技术.尝试以下方法之一:
ActivityB发送一个广播Intent,其中ActivityA侦听ActivityA开始ActivityB使用startActivityForResult()和ActivityB将数据发送回ActivityA使用setResult()public static(即:全局)变量进行通信您真正需要了解的是,在某些情况下,可能会发生以下情况:
ActivityA堆栈中运行并位于堆栈ActivityB顶部ActivityB,然后调用onCreate(),onStart()和onResume()的ActivityB.在这种情况下,不再有任何实例ActivityA.那个例子已经死了.因此ActivityB无法与之沟通,ActivityA因为它已不复存在.
| 归档时间: |
|
| 查看次数: |
7272 次 |
| 最近记录: |