Элемент в ArrayList заменяется вместо добавления

Я пытаюсь перенести все элементы из ArrayList, сохраняемые в EditActivity, в MainActivity с помощью SharedPreferences. Но только последние введенные данные отображаются в ListView при первом MainActivity. Как я могу сделать так, чтобы весь текст, введенный в EditText, отображался как другой элемент в ListView, а не заменял предыдущий элемент. Вот мой код:

MainActivity

public class MainActivity extends AppCompatActivity {

private ListView list;
private Button nextButton;

ArrayList<String> arrayList = new ArrayList<String>();
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    list = (ListView) findViewById(R.id.list);
    nextButton = (Button) findViewById(R.id.nextButton);

        loadData();

    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, arrayList);
    list.setAdapter(adapter);
    nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            nextActivity();
        }
    });
}
public void nextActivity(){
    Intent intent = new Intent(this, EditActivity.class);
    startActivity(intent);
}

public void loadData(){
    SharedPreferences sp = getSharedPreferences("Data", Context.MODE_PRIVATE);
    Gson gson = new Gson();
    String json = sp.getString("list", null);
    Type type = new TypeToken<ArrayList<String>>() {}.getType();
    arrayList = gson.fromJson(json, type);

    if (arrayList == null){
        arrayList = new ArrayList<String>();
    }
}}

EditActivity

public class EditActivity extends AppCompatActivity {

private EditText input;
private Button addButton;

public ArrayList<String> list = new ArrayList<String>();
public ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit);

    input = (EditText) findViewById(R.id.input);
    addButton = (Button) findViewById(R.id.addButton);

    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list);
    addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String getInput = input.getText().toString();
            adapter.addAll(getInput);
            saveData();
            input.setText(""); //clear the value in the edit text
        }
    });

}
public void saveData(){
    SharedPreferences sp = getSharedPreferences("Data", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    Gson gson = new Gson();
    String json = gson.toJson(list);
    editor.putString("list", json);
    editor.apply();
}}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
167
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вы забыли добавить элемент в список перед сохранением, и в результате вы сохраняете только последний элемент.

addButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String getInput = input.getText().toString();
        list.add(getInput); //add this line
        adapter.addAll(getInput);
        saveData();
        input.setText(""); //clear the value in the edit text
    }
});

Другие вопросы по теме