我有一个代码,允许我向 RecyclerView 添加新项目。问题是,重新启动应用程序后,该元素不会保存并且会消失。怎么解决这个问题呢?
package ru.mdev.moneybox;
import android.app.Dialog;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private ImageView menu;
private EditText search;
private RecyclerView recview;
private Button create;
public ArrayList<Box> boxes;
private BoxAdapter adapter;
private Dialog dialog;
private TextView check;
private static final String BOXES_KEY = "boxes_key";
private static final String PREFS_NAME = "ru.mdev.moneybox";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
menu = findViewById(R.id.menu);
search = findViewById(R.id.search);
recview = findViewById(R.id.recview);
create = findViewById(R.id.create);
check = findViewById(R.id.check);
dialog = new Dialog(MainActivity.this);
recview.setLayoutManager(new LinearLayoutManager(this));
boxes = new ArrayList<>();
adapter = new BoxAdapter(boxes, MainActivity.this);
recview.setAdapter(adapter);
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.setContentView(R.layout.activity_create);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.setCanceledOnTouchOutside(true);
dialog.show();
EditText name = dialog.findViewById(R.id.name);
EditText target = dialog.findViewById(R.id.target);
EditText starter = dialog.findViewById(R.id.starter);
Button ssave = dialog.findViewById(R.id.save);
ssave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (name.getText().toString().isEmpty() || target.getText().toString().isEmpty() || starter.getText().toString().isEmpty()) {
Toast.makeText(MainActivity.this, "Поля не могут быть пустыми", Toast.LENGTH_SHORT).show();
} else if (name.getText().length() > 20) {
Toast.makeText(MainActivity.this, "Название не может быть более 20 символов", Toast.LENGTH_SHORT).show();
} else {
boxes.add(new Box(name.getText().toString(), Integer.valueOf(target.getText().toString()), Integer.valueOf(starter.getText().toString())));
dialog.dismiss();
adapter.notifyDataSetChanged();
}
}
});
}
});
}
}
最后我自己想出了一个解决方案,使用了json的数据存储方式。如果有人需要的话我附上代码: