У меня есть tride saveInstanceState , и это действительно помогает сохранять данные, но AutoCompleteTextView не видит какие-либо данные (в журнале я вижу, что данные существуют, и ониправильно) Затем я меняю ориентацию во второй раз и в журнале см. ArrayList = null ;вот некоторый код
...
public class AddDayActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor>
...
ArrayAdapter<String> adapter;
private AutoCompleteTextView edit_day_name;
private ArrayList<String> autoCompleteList;
private ArrayList<Integer> autoCompleteListPrice;
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_pay_day);
autoCompleteList = new ArrayList<String>(); //Array list witch need to save
autoCompleteListPrice = new ArrayList<Integer>();//Array list witch need to save
...
edit_day_name = findViewById(R.id.edit_day_name); //AutoCompleteTextView
...
if (savedInstanceState != null) {
autoCompleteList.addAll(Objects.requireNonNull(savedInstanceState.getStringArrayList("BundleAutoCompleteList")));
autoCompleteListPrice.addAll(Objects.requireNonNull(savedInstanceState.getIntegerArrayList("BundleAutoCompleteListPrice")));
Log.d(UtilContract.LOG_KEY, " onRestoreInstanceState Working " + savedInstanceState.getIntegerArrayList("BundleAutoCompleteList")
+ "\n" +
savedInstanceState.getIntegerArrayList("BundleAutoCompleteListPrice")
+ "\n" + autoCompleteList + "\n" + autoCompleteListPrice);
}
adapter = new ArrayAdapter<String>(this,
R.layout.dropdown_menu_popup_item, autoCompleteList);
Log.d(UtilContract.LOG_KEY, ".." + autoCompleteList);
edit_day_name.setAdapter(adapter);
...
LoaderManager.getInstance(this).initLoader(NAME_UNIC_LOADER, null, this);
...
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
//Save data in Bundle
outState.putStringArrayList("BundleAutoCompleteList", autoCompleteList);
outState.putIntegerArrayList("BundleAutoCompleteListPrice", autoCompleteListPrice);
Log.d(UtilContract.LOG_KEY, " savedInstanceState Save " + autoCompleteListPrice + "\n" + autoCompleteList);
}
Загрузчик для заполнения массива из базы данных SQL
@NonNull
@Override
public Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) {
String[] projection = {
UtilContract.KEY_ID,
KEY_NAME_DETAIL,
KEY_PRICE_OF_DETAIL
};
CursorLoader cursorLoader = new CursorLoader(this,
UtilContract.DetailTable.CONTENT_URI,
projection,
null,
null,
KEY_NAME_DETAIL
);
Log.d(LOG_KEY, " CursorLoader DetailTable " + cursorLoader);
return cursorLoader;
}
@Override
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor data) {
int count = data.getCount();
if (autoCompleteList.isEmpty() || autoCompleteListPrice.isEmpty()) {
//
while (data.moveToNext()) {
autoCompleteList.add(data.getString(data.getColumnIndexOrThrow(KEY_NAME_DETAIL)));
autoCompleteListPrice.add(data.getInt(data.getColumnIndexOrThrow(KEY_PRICE_OF_DETAIL)));
}
} else {
//
autoCompleteList.clear();
autoCompleteListPrice.clear();
//
while (data.moveToNext()) {
autoCompleteList.add(data.getString(data.getColumnIndexOrThrow(KEY_NAME_DETAIL))); autoCompleteListPrice.add(data.getInt(data.getColumnIndexOrThrow(KEY_PRICE_OF_DETAIL)));
}
}
Log.d(LOG_KEY, " Cursor DetailTable " + data + " count " + count);
}
@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
adapter.clear();
}
В этой ситуации как правильно сохранить данные для AutoComplateView?
PS: Я использую"androidx" и".material: 1.1.0-alpha09" для создания из AutoComplateView "ExposedDropdownMenu"