【问题标题】:cast activity to interface leads to errors "Cannot cast..."将活动投射到界面会导致错误“无法投射...”
【发布时间】:2014-01-01 16:44:16
【问题描述】:

我想知道当我们从第二个活动调用类 OtherClass 时,如何发送第一个活动“MainActivity”的引用。 MainActivity 以 Intent 调用 SecondActivity,SecondActivity 必须将 MainActivity 的引用发送给 Otherclass,以便 OtherClass 将最终结果发送给 MainActivity,如下所示:

public class ActA extends Activity implements OtherClass.MyInterface {
    //...
    //actA sends Intent to actB
}


public class ActB extends Activity {
    //send interface actA to otherClass 
    ActB actB = new otherClass( (OtherClass.MyInterface)ActA.class );//wrong: cannot cast from Class<ActA> to myInterface

    //or : actB = new ActB(arg1, ActA.class);//wrong: ask me to change the constructor of Otherclass



//constructor of otherclass
public OtherClass( OtherClass.MyInterface resultReceiver)

//in OtherClass 
public interface MyInterface {
    public void myFunc();
}

您知道如何解决这些错误吗?

【问题讨论】:

  • 您不应将直接实例传递给其他活动。还有其他方法。你的目的是什么
  • 你想在这里做什么。为什么需要在ActivityB中引用activityA??
  • 不要这样做,这是造成巨大内存泄漏的一种方式。
  • 我的解释不是很清楚,抱歉。 OtherClass 需要将最终结果发送到 MainActivity(我编辑了我的帖子),我可以尝试使用 MainActivity 捕获的广播,但代码是由其他人编写的,并允许添加接口类型的参数。在我的情况下,这是 MainActivity,但它不起作用。

标签: android interface android-activity


【解决方案1】:

更新

我还没有完全清楚。这是一个丑陋的解决方案,但它会回答你的问题

但我猜你的问题需要 What you need is to set a listener that will get called when you process something asynchronously

简单

保持一个单独的类作为单例

例子:

public class singletonClass{

private yourInterface myInterface;
private singletonClass instance;

// Use this method to get the object of this class
public static singletonClass getInstance()
{
    if(instance == null)
        instance = new singletonClass();
    return instance;
}

public yourInterface getListener()
{
    return myInterface;
}

public void setListener(yourInterface listener)
{
    this.listener = listener;
}

}

现在来自您的ActivityA

singletonClass instance = singletonClass.getInstance();
instance.setListener(this);

确保您的ActivityA implements 接口

然后来自ActivityB

singletonClass instance = singletonClass.getInstance();
yourInterface listener = instance.getListener();

然后使用上面的listener 调用构造函数

【讨论】:

  • 谢谢,我在上面编辑了我的帖子,我猜不是很清楚,对此感到抱歉:OtherClass 需要将最终结果发送到 MainActivity(我编辑了我的帖子),我可以尝试广播被MainActivity捕获,但代码是别人做的,允许添加接口类型的参数。或者有没有办法检索用于在 MainActivity 和 SecondActivity 之间发送意图的活动? getIntent().getActivity() 之类的东西?
  • 好的,我用的是广播,我没有发现演员有什么问题,我会把这个作为答案谢谢你的帮助