通过Intent发送Android接口

4

我有一个实现了接口 InterfaceA 的活动 (ActivityA)。当我想要显示另一个活动时,我使用以下代码:

Intent intent = new Intent(this, ActivityB.class);
// intent.putExtra("interface", this);
startActivity(intent);

并且是ActivityA

public class ActivityA extends Activity implements InterfaceA, Serializable

然后在ActivityB中

Intent intent = getIntent();
Serializable s = intent.getExtras().getSerializable("interface");
if(s != null && s instanceof InterfaceA)
   iInterface = (InterfaceA)s;

但是我在执行过程中遇到了一个错误

android java.io.NotSerializableException

能否通过Intent发送一个Activity(就像Objective-C中的委托一样)?

谢谢。


它不是一个委托。getSerializable期望一个可序列化的对象。Activity没有实现Serializable。 - Blackbelt
那么,我该如何在前一个活动上执行操作? - John smith
你为什么想要传输接口?你需要哪种类型的代码? - nurisezgin
在ActivityB中,我正在创建一个新的本地对象,我希望在不必刷新ActivityA中的listView的情况下显示它。因此,我想向ActivityB发送一个接口(实现在ActivityA中)。这可能吗?我在ObjectiveC之间使用委托来执行类似的操作UIViewController.. - John smith
1个回答

3
在ActivityB中,我正在创建一个新的本地对象,我希望在不刷新ActivityA中的listView的情况下在其中显示该对象。
您可以在ActivityA中启动带有结果的ActivityB,因为这样不会重新创建ActivityA。当您从ActivityB接收到结果时,在列表中添加新对象并调用适配器的notifyDataSetChanged()方法。
在ActivityA中,
public static final int REQ_CODE = 1;

// Starting an activity
Intent intent = new Intent(this, ActivityB.class);
startActivityForResult(intent, REQ_CODE );

重写此方法以获取结果

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == REQ_CODE)
        {
            if(resultCode == Activity.RESULT_OK)
            {
                // Add the object in list and call adapter's notifyDataSetChanged()
            }
        }
    }

ActivityB 中,
Intent data = new Intent();
// Put the new object as Serializable in Intent
setResult(Activity.RESULT_OK, data);
// And finally, close the activity
finish();

1
如果这是答案,那么请更改您的问题标题...因为这个答案是解决您问题的另一种方法。谢谢。 - Himanshu Mori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接