Проблема с использованием onSaveInstanceState и onRestoreInstanceState
Я использую приведенный ниже код в своей корзине. когда я добавляю товары в корзину, он показывает товары в корзине. но когда я открываю другое действие и возвращаюсь в корзину, он показывает ноль. тогда я нашел применение onSaveInstanceState
а также onRestoreInstanceState
.. даже после того, как я использую этот код, он показывает ноль. Кто-нибудь может указать, что пошло не так в этом коде.
Что я ожидаю от использования этого кода, так это когда я добавляю элементы в корзину, он будет сохранен в onSaveInstanceState, а когда я снова открою корзину, он будет использовать onRestoreInstanceState и покажет элементы в корзине.
public class ShoppingCartActivity extends Activity {
ProductAdapter mCartList;
ExpandableListView expListView;
List<String> listDataHeader;
List<String> listDataHeaderPrice;
List<String> listDataHeaderQty;
HashMap<String, List<String>> listDataChild;
private ExpandableListView mExpandableList;
String description;
String price;
String quantity;
ArrayList<String> myList = new ArrayList<String>();
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putString("description", description);
savedInstanceState.putString("price", price);
savedInstanceState.putString("quantity", quantity);
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
description = savedInstanceState.getString("description");
quantity = savedInstanceState.getString("quantity");
price = savedInstanceState.getString("price");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cart_activity);
if (savedInstanceState != null) {
Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_SHORT)
.show();
}
quantity = getIntent().getStringExtra("quantity");
price = getIntent().getStringExtra("price");
description = getIntent().getStringExtra("description");
myList.add(description);
myList.add(price);
myList.add(quantity);
ActionBar actionBar = getActionBar();
getActionBar().setIcon(
new ColorDrawable(getResources().getColor(
android.R.color.transparent)));
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
// Enabling Back navigation on Action Bar icon
actionBar.setDisplayHomeAsUpEnabled(true);
// get the listview
expListView = (ExpandableListView) findViewById(R.id.lvExp);
// preparing list data
prepareListData();
mCartList = new ProductAdapter(this, listDataHeader,
listDataHeaderPrice, listDataHeaderQty, listDataChild);
// setting list adapter
expListView.setAdapter(mCartList);
// Listview Group click listener
expListView.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
Toast.makeText(getApplicationContext(),
"Group Clicked " + listDataHeader.get(groupPosition),
Toast.LENGTH_SHORT).show();
return false;
}
});
1 ответ
Я думаю, onRestoreInstanceState вызывается после onStart, и код для обновления вашего пользовательского интерфейса находится в onCreate. Таким образом, данные, вероятно, есть, но вы не показываете их в пользовательском интерфейсе. Попробуйте обновить свой ListView/Adapter после строки price = savedInstanceState.getString("price");