我有一个名为 mylikes 的活动,可以从主要活动中调用它,然后它应该显示喜欢的项目列表。另一个名为programs的活动有一个项目列表,我按下like按钮,它应该将该项目添加到喜欢的项目列表并显示在Mylike活动中。我在程序活动中将该项目添加到数组中,但是当我从 main 调用 mylike 活动时,出现强制关闭错误。那么如何使数组列表全局化。
4 回答
您可以使用自己的覆盖默认应用程序类,并从那里创建和使用您的数组。如果您有一个名为 MyApplication 的应用程序,则添加一个类
public class MyApplication extends Application {
public ArrayList myGlobalArray = null;
public MyApplication() {
myGlobalArray = new ArrayList();
}
}
要将数据添加到数组中,请使用:
((MyApplication)getApplicationContext()).myGlobalArray = anyarray;
然后,您可以通过类似的方式访问活动
((MyApplication)getApplicationContext()).myGlobalArray ... etc.
在您的应用程序清单中,您还需要通过将名称添加到您的应用程序块来命名您的扩展应用程序类
<application
android:icon="@drawable/icon"
android:name=".MyApplication" ...
如果您有一个所有活动都需要访问的全局范围的复杂对象,并且您不想序列化/反序列化,这是 IMO 最简单的方法,对于更简单的场景,您可以在启动活动时通过将额外内容放入意图来传递项目
你也可以使用单例,但是应用程序类很容易管理
我没有测试或编译代码,这只是作为一个概述,所以要注意拼写错误等。
这是应用程序类文档的应用程序的链接
您可以使用一些单例类来保存您的喜欢数组,以跨多个活动共享此列表。
public class LikeManager{
List<Item> likes;
//....
private LikeManager(){
//...
}
public LikeManager getInstance(){
//...
}
public List<Item> getLikes(){
return likes;
}
}
因此,当您需要访问权限时likes
,请致电LikeManager.getInstance().getLikes()
最简单的方法是使用公共 getter 和 setter,允许应用程序的其他部分检索和设置 ArrayList 的值。
除此之外,您可以将其写入 SharedPreferences、某处的文件或将数据存储在数据库中。
您可以使用 Application 类来存储这些数据,并且可以在所有 Activity 中使用它
public class BusinessClass extends Application
{
public ArrayList array = new ArrayList();
}
然后使用以下代码在任何活动中调用它
BusinessClass appState = ((BusinessClass)getApplicationContext());
ArrayList myarray=appState.array;
在 android 中,如果您想维护任何全局并在两个或多个活动中共享它,那么您可以使用 Application calss。
欲了解更多信息
http://developer.android.com/reference/android/app/Application.html