- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个这样的界面:
public interface MyInterface {
public void aMethod();
}
我的自定义对象:
public class MyObject {
private Context context;
private MyInterface inter;
public MyObject(Context context) {
this.context = context;
this.inter = (MyInterface) this.context;
inter.aMethod();
}
}
主 Activity :
public class MainActivity extends Activity implements MyInterface {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyObject my = new MyObject(this);
}
@Override
public void aMethod() {
Toast.makeText(this, "done", Toast.LENGTH_SHORT).show();
}
}
在这里,在 MyObject 构造函数中,我可以从上下文中获取接口(interface),然后与 Activity 进行通信。
但是如何将界面从一个 Activity 发送到另一个 Activity ?
我需要从 Activity2 调用 Activity1 中的一个方法
有没有这样的方法?
注意:我不想使用 fragment 。
最佳答案
首先,这很糟糕:
this.inter = (MyInterface) this.context;
如果您将上下文传递给未实现您的接口(interface)的构造函数,您的应用程序将崩溃,并且很容易犯这样的错误。所以你看,这很容易出错,而是像这样实现它:
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();
}
现在您可以将接口(interface)作为额外的添加到启动另一个 Activity
的 Intent
中:
Intent intent = new Intent(context, OtherActivity.class);
intent.putExtra("interface", inter);
startActivity(intent);
在 OtherActivity
中,您可以像这样从 Intent
获取 Object
:
@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
的原因,但这应该可以解决您的问题。
希望我能帮上忙,如果您有任何其他问题,请随时提出!
关于java - Android:如何将界面从一个 Activity 发送到另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24780000/
我是一家小型非营利组织的技术总监,我们正在制作一个新网站。我们提出了几个不同主页设计的模型,需要接收董事会成员的意见。是否有在线应用程序/程序/框架可以接收和组织用户评论?我正在寻找允许在查看页面时发
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我阅读了很多关于 java 接口(interface)的文章。我知道你可以实现多态性和其他伟大的东西(函数指针等)。我有理论知识,但有一点点或什至没有。我一直在使用很多已经制作好的界面,比如“Runn
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我正在尝试在 Windows 7 上编写一个 python 脚本来与我的 Wacom Bamboo Pen 数位板交互。 Wacom 建议使用 WinTab API,它工作正常,但不适用于我的应用程序
我正在研究一种远程访问有关 Linux 服务器统计信息的方法,即 conky会显示。 有没有办法与 conky 交互并获取它显示的统计信息?如果没有,您能否推荐一种获取此类统计数据的好方法? (C/C
将所有这些代码包装在 UI: do { } block 中的原因是什么?我在哪里可以获得关于它的明确说明? UI: do { backgroundButton.setImage(UIImage
我需要将 R 连接到某些 C# 应用程序。我安装了 rscproxy_1.3 和 R_Scilab_DCOM3.0-1B5 添加了对 STATCONNECTORCLNTLib、StatConnecto
我正在尝试遍历接口(interface)片段以通过 id 查找我的特定结构并更改属性。 type A struct { ID ID Steps []Step } type Ste
我有两种不同格式的相同界面,一种是键由低破折号分隔的 JSON 格式,另一种是 javascript camelCase 格式: JSON 格式: interface MyJsonInterface
操作系统:Linux。 我正在尝试寻找可能的方法来为我的嵌入式系统实现 Web 界面。 目前有一个外壳(基于文本)和一小组命令用于查询设备。 我是网络开发新手,我的问题是: 我必须使用什么网络服务器?
我正在尝试运行基于 Mechanical Turk Qualtrics 的调查,并且需要一些似乎可以通过 Mechanical Turk API 使用的功能,例如 custom Qualificati
我见过漂亮的 MetroTwit 界面 http://www.metrotwit.com/ ;我想知道使用了哪些 WPF 组件来尝试重现它。 最佳答案 MetroTwit 设计师在这里:) 所有的控件
我有一个小问题。我需要将 Hadoop Web 界面与我们的 Web 应用程序集成。我只需要一个 Hadoop 接口(interface),我们可以在其中运行一些 hadoop 命令,例如 1
假设我有这个 JavaScript 函数: function updateMainBuff(buff) { // do some stuff } 我的
我试图找出一个窗口是否属于当前的虚拟桌面。 我从 winapi 中找到了 VirtualDesktopManager 类,但即使根据 here 它应该位于“shobjidl.h” header 中,当
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 8年前关闭。 Improve this
我的 Tkinter GUI 界面有问题。文本不会在 shell 中打印,但如果将 Entry 放置在第一个 tk 窗口 get() 中,它就可以工作...帮助我吗? 这是我的代码: import o
我有一个在 MATLAB 中实现的随机微分方程组。只有 4 个变量与 Euler-Maruyama 集成,所以没有什么太花哨的......不过,技术细节对于这个问题并不重要。 您建议我如何构建一个 W
对于我创建的插件,我想添加一个网络界面,您可以从中更改设置并执行一些简单的数据操作。此数据操作应通过 sqlquerys 完成。我正在使用 sqlite 数据库,这就是问题开始的地方: 网站(serv
我是一名优秀的程序员,十分优秀!