[英]An inquiry regarding Java classes objects and data transfer from one activity to another in Android
因此,我正在制作一个Android应用程序,并且有一个ListView
(称为showclients
)链接到另一个ListView
(称为ViewClient
)。 调用showclients
,它将从其他Java类中收集一堆数据并将其存储在ClientList
类型的对象中(我已经制作了)。
ViewClient
需要该信息,并且花费太长时间才能再次从头开始获取信息,因此在showclients
我创建了一个名为Clist
的ClientList
类型的public static
变量,并创建了一个方法...
public static ClientList returnobj(){
return Clist;
}
回到ViewClient
我打电话给
ClientList grief= showclients.returnobj();
它得到了我的数据。 我想知道为什么它能工作,以及是否可以在没有Android的Java上工作。
所以您要问如何在活动之间共享数据。 一种选择是将数据模型托管在应用程序类中。 创建一个扩展Application
的类,
public MyApplication extends Application { ...
在清单中添加您的应用程序类,
<application
android:name=".MyApplication"
...
Application
类的生命周期允许您在此处托管数据。 它超出了任何特定活动的开始/停止的范围。 将私有成员添加到MyApplication
类,并提供获取器和设置器以访问数据,
public MyApplication extends Application {
private MyData myData;
public MyData getMyData() { return myData; }
public void setMyData(MyData data) { this.myData = data; }
}
你到底是什么问题?
什么意思是“没有Android的Java”? 由于ListView,Activity等是特定于Android的,因此我拒绝。
但是您的“概念”应该/可以在没有Android的情况下工作。 ->请更多信息...
恕我直言,您的描述有点含糊...也许会发布更多代码。
如果您要问这个确切的代码是否可以通过在Java SE上编译并运行它(即“没有Android”)来工作,那么请否 ,因为Java SE没有使用某些类(例如Activity
)。
对于Java SE中的图形用户界面,您应该使用Swing或SWT之类的库。
如果您要问通用的数据传输方案是否可以在Java SE上运行,那么可以 。 原因恰恰是您使用static
关键字。 这意味着静态的“变量”(实际上是member )和静态方法是为整个showclients
类定义的,而不是为其特定对象定义的。 这意味着在程序的任何地方,静态成员的值都是相同的,并且returnobj()
将返回相同的对象。
如果没有static
关键字,则对于您创建的showclients
每个对象,该值将只存在一次,而不是整个类。
这就是您的解决方案在Android上运行的原因之一-如果该值不会存储在静态成员中,则您必须引用实际的showclients
对象,该对象可能会在其他活动显示时随时从内存中删除(因为可以随时删除后台活动(在这种情况下为showclients
)。 因为成员是静态的,所以只要Java虚拟机加载了showclients
,它就会一直showclients
,这对于您来说是您需要的时间。
最后, Jeffrey的解决方案对于Android代码而言要好得多,因为您不会滥用Activity
的定义来获取应放在专用代码段中的其他功能。 在Java SE中,您将通过创建实现Singleton模式的新类来实现类似的解决方案。 而且,实际上,就您的应用而言,Jeffrey示例中的MyApplication
是单例。
我认为您正在询问静态关键字? 静态方法(或变量)直接绑定到类本身,而不是其特定实例。 最好在示例中显示,但是带有变量(不要以这种方式使用,请阅读封装):
class A {
public static String foo = "foo";
public A() {
foo = "bar";
}
}
class B {
public void something() {
// suppose print exists
print(A.foo); // prints foo
A a = new A();
print(A.foo); // prints bar
print(a.foo); // prints bar
}
}
使自己成为一些简单的Java应用程序(就是
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.