首先,这是非常糟糕的:
this.inter = (MyInterface) this.context;
如果将上下文传递到未实现接口的构造函数中,则应用程序将崩溃,并且很容易犯这样的错误。所以你看,这是非常容易出错的,而是像这样实现它:
public class MyObject {
private Context context;
private MyInterface inter;
public MyObject(Context context, MyInterface inter) {
this.context = context;
this.inter = inter;
inter.aMethod();
}
}
这样,它更安全,更干净。
要将 发送到另一个,请确保它实现如下:Object
Activity
Serializable
public interface MyInterface extends Serializable {
public void aMethod();
}
现在,您可以将接口作为额外的界面添加到开始另一个界面中:Intent
Activity
Intent intent = new Intent(context, OtherActivity.class);
intent.putExtra("interface", inter);
startActivity(intent);
在你可以得到从这样的:OtherActivity
Object
Intent
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
MyInterface inter = (MyInterface) intent.getSerializableExtra("interface");
...
}
编辑:
当您在中创建类似操作时,您正在创建一个匿名类:Activity
OnCreateListener inter = new OnCreateListener() {
@Override
public void onObjCreate() {
Log.d("pltk", "dfgbfdgh");
}
};
关于这种匿名类的事情是它们不是静态的,这意味着您仍然可以从嵌套此侦听器的类中访问方法和变量。在内部,这样做的原因是这个新类保留了对创建它的类的实例的引用,在你的例子中是封闭的。这是一件好事,我们一直使用它等。但是在您的情况下,这是一个问题,因为您想将其发送给另一个 .对旧的内部引用可以防止它被序列化,这是一件好事。如果您可以发送类似的内容,则会创建疯狂的内存泄漏,因为垃圾回收器无法收集的所有旧引用。Activity
OnClickListener
Object
Activity
Activity
Object
解决方案非常简单,您可以在其自己的文件中定义类,也可以使类成为静态的。在此上下文中,静态意味着该类基本上被视为它自己的单独文件中,因此无法访问封闭类的实例。
因此,总结一下您要做的就是保持类嵌套并像这样定义它:
public class YourActivity extends Activity {
private static class OnCreateListenerImpl implements OnCreateListener {
@Override
public void onObjCreate() {
Log.d("pltk", "dfgbfdgh");
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_palatok);
OnCreateListener inter = new OnCreateListenerImpl();
Intent in = new Intent(Palatok.this, SecondActivity.class);
in.putExtra("ob", inter);
startActivity(in);
}
}
或者,您可以将实现移动到其自己的单独文件中:
public class OnCreateListenerImpl implements OnCreateListener {
@Override
public void onObjCreate() {
Log.d("pltk", "dfgbfdgh");
}
}
虽然你为什么想发送一个到另一个仍然逃避我,但这应该解决你的问题。OnCreateListener
Activity
我希望我能提供帮助,如果您有任何其他问题,请随时提问!