Android: ListView показывает только последний элемент, сохраненный общими настройками - PullRequest
0 голосов
/ 12 марта 2020

Чтобы было понятно, ma.getData () возвращает строку из другого действия, которое я хочу сохранить в общих настройках. Поэтому каждый раз, когда я отправляю строку (из другого действия) в следующее действие, я сохраняю ее с помощью saveData () (эта функция вызывается при нажатии кнопки) .. поэтому у меня много строк для отображения в виде списка использование еще двух функций (loadData () и updateViews ()). Эти функции вызываются при запуске операции, поэтому для загрузки в виде списка сохраненных строк.

Проблема заключается в том, что только последняя строка, которую я получаю от другого действия, отображается в listView.

Что я делаю неправильно?

public class activity_profile extends AppCompatActivity {

MainActivity ma = new MainActivity();
private static ArrayList<String> addArray;
ListView show;


private Button btn;
private ArrayAdapter<String> adapter;
public static final String SHARED_PREFS = "sharedPrefs";
public static final String TEXT = "text";


private String text;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);
    mEditText = (TextView) findViewById(R.id.hist) ;
    show = (ListView) findViewById(R.id.listview1);
    namefield = (EditText) findViewById(R.id.username);
    namelabel = (TextView) findViewById(R.id.namelabel);
    btn = (Button)findViewById(R.id.Update_btn);
    loadData();
    updateViews();
}
public void saveData() {
    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();

    editor.putString(TEXT, ma.getData());


    editor.apply();

    Toast.makeText(this, "Data saved", Toast.LENGTH_SHORT).show();
}
public void loadData() {
    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    text = sharedPreferences.getString(TEXT, "");

}

public void updateViews() {

    adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, Collections.singletonList(text));
    show.setAdapter(adapter);
    //mEditText.setText(sb.toString());
    adapter.notifyDataSetChanged();

}

, и это мой xml для представления списка

 <RelativeLayout
    android:layout_width="398dp"
    android:layout_height="204dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/RecipeHistoryLabel">


    <ListView
        android:id="@+id/listview1"
        android:layout_width="386dp"
        android:layout_height="wrap_content" />
</RelativeLayout>

1 Ответ

0 голосов
/ 12 марта 2020

Вы перезаписываете свои данные одним ключом внутри SharedPrefs. Возможны следующие варианты:

  1. Использование формата для сохранения и чтения данных в общих настройках, например json
  2. Использование базы данных, например Room

Пример из ( 1) вариант.

//saving new data on previus key
//Use - to sepete data e.g. (FirstData-SecondData-ThiredData)
String yourNewData = "data";
String oldDataFromPrefs = prefs.getString("KEY");
String dataToBeSaved = oldDataFromPrefs + "-" + yourNewData;

//reading data as String[] to show it on the ListView 
//You need to pass tokens to your adapter
String readDataFromPref = prefs.getString("KEY");
String[] tokens = readDataFromPref.split("-");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...