ANDROID:在两个活动之间重新创建类对象

时间:2016-10-25 22:19:29

标签: java android file object

我正在尝试创建一个TO DO应用程序,如果我点击一个条目,它会转到一个编辑活动页面,我可以在其中编辑该条目。但是,每次单击该条目并对其进行编辑并按后退按钮时,更改都不会反映出来。代码一直有效,直到我添加用于存储到文件的代码。但是一旦我添加了该代码,就会重新创建Entry对象。有人可以帮我这个吗?

MainActivity.java

public class MainActivity extends AppCompatActivity {
ArrayList<Entry> mEntries;
String toDo;
MyAdapter adapter;
private LinearLayoutManager linearLayoutManager;
RecyclerView rv;
private EditText editText1;
String json = "";
Gson gson;
File dir, saveLocation;
FileWriter file1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    gson = new Gson();

    try {
        String line;
        dir = getFilesDir();
        File file = new File(dir, "storage.json");
        if (file.exists()) {
            BufferedReader br = new BufferedReader(new FileReader(file));
            while ((line = br.readLine()) != null) {
                json = json + line;
                Type collectionType = new TypeToken<ArrayList<Entry>>() {
                }.getType();
                mEntries = gson.fromJson(json, collectionType);
                ToDoManager.mEntries=mEntries;
            }
        }
        else
    mEntries = ToDoManager.getmEntries();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    rv = (RecyclerView) findViewById(R.id.recycler_view);
    adapter = new MyAdapter(this, mEntries);
    rv.setAdapter(adapter);
    linearLayoutManager = new LinearLayoutManager(this);
    rv.setLayoutManager(linearLayoutManager);
    Button sub = (Button) findViewById(R.id.buttonsubmit);
    sub.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ButtonClick(v);
        }
    });
    ItemTouchHelper.Callback callback = new SwipeHelper(adapter);
    ItemTouchHelper helper = new ItemTouchHelper(callback);
    helper.attachToRecyclerView(rv);
}

@Override
protected void onStop() {
    super.onStop();
    json = gson.toJson(mEntries);
    Log.d("jsondata", json);
    try {
        dir = getFilesDir();
        saveLocation = new File(dir, "storage.json");
        file1 = new FileWriter(saveLocation);
        file1.write(json);
        file1.flush();
        file1.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@Override
public Object onRetainCustomNonConfigurationInstance() {
    return mEntries;
}

public void ButtonClick(View v) {
    editText1 = (EditText) findViewById(R.id.editText1);
    toDo = editText1.getText().toString().trim();
    if (toDo.isEmpty()) {
        return;
    }
    Entry e = new Entry(toDo, false);
    mEntries.add(e);
    adapter.notifyItemInserted(mEntries.size() - 1);
    editText1.setText("");
}
}

EditActivity.java

public class EditActivity extends AppCompatActivity {
int value;
Entry e;
EditText editText2;
CheckBox cb1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit);
    editText2 = (EditText) findViewById(R.id.editText2);
    cb1 = (CheckBox) findViewById(R.id.task_checked);
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        value = extras.getInt("Task");
    }
    e = ToDoManager.getmEntries().get(value);
    editText2.setText("");
    editText2.setText(e.getS());
    cb1.setChecked(e.isB());
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    e.setS(editText2.getText().toString());
    e.setB(cb1.isChecked());
    ToDoManager.mEntries.set(value, e);
    Intent intent = new Intent(this.getApplicationContext(), MainActivity.class);
    startActivity(intent);
}

Entry.java

public class Entry {
String S;
boolean b;
String imagePath;
//Getter and Setter methods
}

ToDoManager.java

public class ToDoManager {
static ArrayList<Entry> mEntries=new ArrayList();
//Getter and Setter method
}

//我附上图片供参考

MainActivity

EditActivity

0 个答案:

没有答案