0

ArrayList を拡張するカスタム オブジェクトにイベントの永続的なログを保持する Android アプリがあります。さまざまなアクティビティがすべて同じ 1 つのログを指すように、シングルトンに保持されます。メイン アクティビティは、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);

再開時のアクティビティ:

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();
    }

}
4

1 に答える 1