我正在尝试通过Gson保存项目ArrayList<MyItem> items的ArrayList
但是,当我重新打开应用程序时,一切都消失了,没有数据被加载。

这是我的代码(我正在使用片段)

public class FragmentPage extends Fragment {

private ExampleAdapter mAdapter;
private EditText editTask;
ArrayList<MyItem> items;
private Button insertbtn;
private Button stateButton;
private TextView taskText;
private String task;


@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
Bundle savedInstanceState) {
    loadData();
    CreateExampleList();


    View view = inflater.inflate(R.layout.page_fragment, container, false);


    RecyclerView recyclerView = view.findViewById(R.id.listRecyclerView);
    taskText = view.findViewById(R.id.tv_country);
    insertbtn = view.findViewById(R.id.button_insert);
    editTask = view.findViewById(R.id.editTask);
    stateButton = view.findViewById(R.id.tv_button);

    insertbtn.setEnabled(false);
    editTask.addTextChangedListener(new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            String taskInput = editTask.getText().toString().trim();
            insertbtn.setEnabled(!taskInput.isEmpty());

        }

        @Override
        public void afterTextChanged(Editable s) {
            task = editTask.getText().toString().trim();

        }
    });


    insertbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            InsertItem();
            SaveData();
            editTask.setText(null);


        }
    });


    recyclerView.setHasFixedSize(true);

    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
    new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemViewCacheSize(500);
    mAdapter = new ExampleAdapter(items);
    recyclerView.setAdapter(mAdapter);


    return view;
}

private void SaveData() {
    SharedPreferences sharedPreferences = this.getActivity().getSharedPreferences("shared
preferences", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    Gson gson = new Gson();
    String json = gson.toJson(items);
    editor.putString("task list", json);
    editor.apply();
}

private void loadData() {
    SharedPreferences sharedPreferences = this.getActivity().getSharedPreferences("shared
preferences", MODE_PRIVATE);
    Gson gson = new Gson();
    String json = sharedPreferences.getString("task list", null);
    Type type = new TypeToken<ArrayList<MyItem>>() {
    }.getType();
    items = gson.fromJson(json, type);

    if (items == null) {
        items = new ArrayList();
    }

}

public void InsertItem() {

    items.add(new MyItem(task, stateButton));
    mAdapter.notifyItemInserted(items.size());


}

private void CreateExampleList() {
    items = new ArrayList<MyItem>();
}

ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new ItemTouchHelper.SimpleCallback(0,
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder
viewHolder, @NonNull RecyclerView.ViewHolder target) {
        return false;
    }

    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
        items.remove(viewHolder.getAdapterPosition());
        mAdapter.notifyItemRemoved(viewHolder.getAdapterPosition());

    }
};
}

最佳答案

我自己找到了答案。

即使我不敢相信它也是如此简单...

我只需要在loadData()下移动View view = inflater.inflate(R.layout.page_fragment, container, false);

10-07 19:09
查看更多