我有一个 Android 应用程序,它将事件的持久日志保存在扩展 ArrayList 的自定义对象中。它保存在一个单例中,以便各种活动都指向同一个日志。主要活动重新加载 onResume 中的列表。
问题是,当我重新加载日志时,所有 UI 元素(如 ArrayAdapter)都会丢失引用,我需要重新设置它们。有用。但是,这似乎是很多工作。
如何将对象重新加载到原始对象的实例中,这样我就不必再次进行所有设置?使用单例应该更容易而不是更难。
我知道这都是引用传递的问题。但我就是无法理解它。
Java 不是我的第一语言...谢谢。
创建活动:
dataLog = DataLog.getInstance();
logView = (ListView) findViewById(R.id.logView);
dataLogAdapter = new ArrayAdapter<String>(this,R.layout.log_row, dataLog);
logView.setAdapter(dataLogAdapter);
活动 onResume:
dataLog = Persister.recoverLog(this, "datalog.dat");
dataLogAdapter = new ArrayAdapter<String>(this,R.layout.log_row, dataLog);
logView.setAdapter(dataLogAdapter);
坚持:
public static DataLog recoverLog(Context context, String fileName){
File file = context.getFileStreamPath(fileName);
DataLog obj = new DataLog ();
if(file.exists() && file.length()>0){
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
obj = (DataLog) ois.readObject();
ois.close();
fis.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
}
return obj;
}
数据记录:
public class DataLog extends ArrayList<String> implements Serializable {
private static final long serialVersionUID = 0L;
public DataLog() {}
private static DataLog _instance;
public static DataLog getInstance() {
if(_instance==null){
_instance = new DataLog();
}
return _instance;
}
public boolean add(String entry) {
super.add(entry);
return true;
}
public void add(int index, String entry) {
if (index > 0)
super.add(index, entry);
else
super.add(entry);
}
public void clear() {
super.clear();
}
}