2015-02-20 1 views
0

Im используя приведенный ниже код в моей активности в корзине покупок. когда я добавил предметы в корзину, он показывает предметы в корзине. но когда я открываю другое действие и возвращаюсь в корзину, он показывает нуль. то я нашел использование onSaveInstanceState и onRestoreInstanceState .. даже после того, как я использую этот код, он показывает null. может кто-нибудь указать, что пошло не так в этом коде.Проблема с использованием 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; 
       } 
      }); 
+0

onSaveInstanceState будет вызываться в какой-то момент, когда ваша активность будет убита для восстановления ресурсов. Поэтому его не нужно называть. –

+0

Я хочу назвать это так, как его убить? –

+0

Вам не нужно убивать вашу деятельность. В случае необходимости ресурсов для андроида он убьет вашу деятельность и вызовет методSaveInstanceState, чтобы сохранить то, что вы хотите. Но если вы вернетесь к своей деятельности, он будет поддерживать все поля и переменные UI. Если вы вызываете завершение своей деятельности перед переходом на другую активность, это уничтожит вашу текущую деятельность. –

ответ

0

Я думаю, что onRestoreInstanceState вызывается после OnStart и код для обновления вашего пользовательского интерфейса в OnCreate. Таким образом, данные, вероятно, есть, но вы не показываете его в пользовательском интерфейсе. Попробуйте обновить ListView/Adapter после строки price = savedInstanceState.getString("price");

+0

Я добавил это, если (savedInstanceState! = Null) {.. когда я снова открываю действие, затем он переходит и печатает 2. есть ли способ передать savedInstanceState в onCreate? –