我必须将ArrayList
从一个活动A传递到另一个活动B.
我是使用getSerializableExtra
和putExtra
方法完成的。我已经知道这些方法的含义,但我不知道我使用它们传递的东西是否永久存储在新活动中,或者是否需要重新加载活动A以便在B中检索我的数据。
所以问题是:如何在初始启动画面中加载我的数据,然后在所有其他活动中使用它而无需重新加载启动画面?
答案 0 :(得分:0)
您可以使用Preference类,您可以在其中定义其静态实例。根据您的需求数据类型创建变量(甚至是ArrayList)。为get和set这个变量设置属性。
在启动画面上设置值,并在应用程序中的任何位置获取所需内容。
试试这个,如果需要,我也会上传代码。
答案 1 :(得分:0)
我已经编写了一些代码,它可以帮助其他活动轻松获取数据,在数据不保密时使用它,
public class HelperShared {
public static final String score = "Score";
public static final String tag_User_Machine = "tag_User_Machine",
tag_Machine_Machine = "tag_Machine_Machine",
tag_Draw_Machine = "tag_Draw_Machine",
tag_Total_Machine = "tag_Total_Machine";
public static SharedPreferences preferences;
public static Editor editor;
public HelperShared(Context context) {
this.preferences = context.getSharedPreferences(score,
Activity.MODE_PRIVATE);
this.editor = preferences.edit();
}
/*
* Getter and Setter methods for Machine
*/
public void setUserMachine(int UserMachine) {
editor.putInt(tag_User_Machine, UserMachine);
editor.commit();
}
public void setMachineMachine(int MachineMachine) {
editor.putInt(tag_Machine_Machine, MachineMachine);
editor.commit();
}
public void setDrawMachine(int DrawMachine) {
editor.putInt(tag_Draw_Machine, DrawMachine);
editor.commit();
}
public void setTotalMachine(int TotalMachine) {
editor.putInt(tag_Total_Machine, TotalMachine);
editor.commit();
}
public int getUserMachine() {
return preferences.getInt(tag_User_Machine, 0);
}
public int getMachineMachine() {
return preferences.getInt(tag_Machine_Machine, 0);
}
public int getDrawMachine() {
return preferences.getInt(tag_Draw_Machine, 0);
}
public int getTotalMachine() {
return preferences.getInt(tag_Total_Machine, 0);
}
}
答案 2 :(得分:0)
不要使用偏好类!偏好设置仅用于设置值。要将数据传递到另一个活动,请使用Serializable
或Parcelable
。请记住,将传递给另一个活动的所有对象都必须实现Serializable或Parcelable。因此,您将ArrayList扩展为实现Parcelable或Serializable的自定义类。
你这样做:
Intent intent = new Intent(getContext(), SomeClass.class);
intent.putSerializableExtra("value", <your serializable object>);
startActivity(intent);
并像
一样收到它们YourObject yourObject = getIntent().getSerializableExtra("value")
或者在这里查看Parcelable
Help with passing ArrayList and parcelable Activity
在活动A中处理的数据不需要在活动B中再次处理。如果数据在A中计算并且您将其发送到B计算,则B接收它已经计算过。
以下是一些正确的方法:http://developer.android.com/guide/topics/data/data-storage.html
答案 3 :(得分:0)
如果您的问题是&#34;如何在初始启动画面中加载我的数据,然后在所有其他活动中使用它而不重新加载启动画面?&#34;比我有更好的解决方案。
创建一个类Memdata.java
public class Memdata{
private static Memdata instance = null;
private String userobject;
public static Memdata getInstance(){
if ( instance == null){
instance = new Memdata();
}
return instance;
}
public String getuserobject() {
return userobject;
}
public void setuserobject(String userobject) {
this.userobject= userobject;
}
}
on You Splash Screen&#39; onCreate方法,设置值
Memdata obj = Memdata.getInstance();
obj.setuserobject(&#34;你好&#34);
在任何想要访问此变量的活动中,只需创建其对象并获取值。
与MyActivity类一样
Memdata obj = Memdata.getInstance();
String str = obj.getuserobject()
您可以根据需要定义任何类型的变量。
答案 4 :(得分:0)
您可以扩展基类Application
类并向其添加成员变量:
public class MyApp extends Application {
private String appLevelString;
public String getAppLevelString() {
return this.appLevelString;
}
public void setAppLevelString(String val) {
this.appLevelString= val;
}
}
您必须按如下方式更新清单文件:
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:name="MyApp">
您可以获取和设置这样的数据:
//For setting
((MyApp) this.getApplication()).setAppLevelString("Test string");
//For getting
String str = ((MyApp) this.getApplication()).getAppLevelString();