При возврате к Activity сбрасываются значения listview
На гиф видна проблема: при возврате к предыдущему activity, сбрасывается список. Как можно решить проблему ?
AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".SettingsActivity"
android:label="@string/label_settings"
android:parentActivityName=".TeamActivity" />
<activity
android:name=".TeamActivity"
android:label="@string/label_team"
android:parentActivityName=".MainActivity" />
<activity
android:name=".MainActivity"
android:theme="@style/Theme.MaterialComponents.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
TeamActivity.java
Button continueBtn;
ListView listView;
TeamAdapter adapter;
ArrayList<String> values = new ArrayList<String>() {{
add("Team 1");
add("Team 2");
}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_team);
continueBtn = findViewById(R.id.team_continues);
listView = findViewById(R.id.team_lv);
listView.setDivider(null);
// Add button addBtn as last item of listView
listView.addFooterView(((LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.team_btn_add, null, false));
adapter = new TeamAdapter(this, values);
listView.setAdapter(adapter);
}
public void addItem(View v) {
values.add("Team " + (values.size() + 1));
adapter.notifyDataSetChanged();
listView.setSelection(listView.getAdapter().getCount() - 1);
}
public void startSettingsActivity(View view) {
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
}
team.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TeamActivity">
<ListView
android:id="@+id/team_lv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/team_continues"
android:layout_alignParentTop="true" />
<Button
android:id="@+id/team_continues"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginStart="64dp"
android:layout_marginEnd="64dp"
android:text="@string/continues"
android:onClick="startSettingsActivity"
android:textSize="32sp" />
</RelativeLayout>
Ответы (1 шт):
Я бы предложил сохранить данные в отдельные класс и при возврате в активность проверять наличие данных в стороннем классе. Такой класс называется синглтоном. Создаем класс-синглтон:
public class OurSingleton {
private static OurSingleton instance;
private OurSingleton (){}
public static synchronized OurSingleton getInstance(){
if(instance == null){
instance = new OurSingleton();
}
return instance;
}
}
добавляем переменную:
ArrayList<String> inValues = new ArrayList<String>()
после этого делаем вытаскивание и добавление данных в этот массив:
private OurSingleton () {
inValues = new ArrayList<String>();
}
public ArrayList<String> getArray() {
return this.inValues;
}
public void addToArray(String value) {
inValues.add(value);
}
дальше в активности где происходит добавление данных при первом запуске проверяем наличие данных в массиве:
if(OurSingleton.getInstance().getArray().size > 0){
// если он не пустой то добавляем с него данные в ваш список
}else{
// если он пустой то добавляем с него дефолтные данные и грузим в список
OurSingleton.getInstance().getArray().add("any value");
}
Так же есть другой вариант - сохранять данные в активности и когда вы на нее будете возвращаться то их восстанавливать. Вот есть пример ниже:
ArrayList myArrayList;
//put value of myArrayList in some other method
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putStringArrayList("myArrayList", myArrayList);
}
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
myArrayList = savedInstanceState.getStringArrayList("myArrayList");
}