我正在尝试创建一个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
}
//我附上图片供参考