2014-10-13 1 views
0

Я не могу понять, почему мой пакет SavedInstanceState не сохраняется, когда приложение закрывается. Скорее всего, это просто что-то глупое, о котором я не знал! Основная деятельность в ней мало, просто адаптер для перехода на экраны, потому что это большая часть того, что я собираюсь сделать. Большая часть кода прямо сейчас находится в моем StandFragment.java, это первая страница, которая появляется при открытии приложения. Вот где состояние сохранения и все такое.InstanceState не сохраняет

MainActivity: общественный класс MainActivity расширяет FragmentActivity {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ViewPager pager = (ViewPager) findViewById(R.id.viewPager); 
    pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));  
} 

private class MyPagerAdapter extends FragmentPagerAdapter { 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int pos){ 
     switch(pos){ 
     case 0: return StandFragment.newInstance("STAND"); 
     case 1: return CartFragment.newInstance("CART"); 
     case 2: return ThirdFragment.newInstance("THIRD"); 
     case 3: return ThirdFragment.newInstance("FOURTH"); 
     case 4: return ThirdFragment.newInstance("FIFTH"); 
     default: return ThirdFragment.newInstance("Default"); 
     } 
    } 

    @Override 
    public int getCount(){ 
     return 5; 
    } 
} 

}

StandFragment:

 public class StandFragment extends Fragment{ 

private int totalMoney; 
private int moneyPerSec; 
private int moneyPerClick; 
Handler handleCounter = new Handler(); 
TextView counter; 
TextView perSecCounter; 
Button buttonMoney; 
Button buttonMoneyPerSec; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    View v = inflater.inflate(R.layout.stand_frag, container, false); 
    super.onCreate(savedInstanceState); 

    buttonMoney = (Button)v.findViewById(R.id.buttonMoney); 
    buttonMoneyPerSec = (Button)v.findViewById(R.id.buttonMoneyPerSec); 
    counter = (TextView)v.findViewById(R.id.tvMoney); 
    perSecCounter = (TextView)v.findViewById(R.id.tvMonPerSec); 

    TextView tv = (TextView) v.findViewById(R.id.tvStandFrag); 
    tv.setText(getArguments().getString("msg")); 

    handleCounter.post(updateCounter); 
    if (savedInstanceState==null){ 
     moneyPerSec = 1; 
     moneyPerClick = 1; 
     totalMoney=0; 
    } 
    else{ 
     moneyPerSec = savedInstanceState.getInt("moneyPerSec"); 
     moneyPerClick = savedInstanceState.getInt("moneyPerClick"); 
     totalMoney = savedInstanceState.getInt("totalMoney"); 
    } 

    buttonMoney.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v){ 
      totalMoney += moneyPerClick; 
      counter.setText(""+totalMoney); 
      perSecCounter.setText(""+moneyPerSec); 
     } 
    }); 
    buttonMoneyPerSec.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v){ 
      if (totalMoney>=10){ 
       totalMoney-=10; 
       counter.setText(""+totalMoney); 
       moneyPerSec++; 
       perSecCounter.setText(""+moneyPerSec); 
      } 
     } 
    }); 
    return v; 
} 

Runnable updateCounter = new Runnable(){ 
    public void run(){ 
     totalMoney += moneyPerSec; 
     counter.setText(""+totalMoney); 
     handleCounter.postDelayed(this, 1000); 
    } 
}; 
public void onPause(Bundle savedInstanceState){ 
    savedInstanceState.putInt("totalMoney",totalMoney); 
    savedInstanceState.putInt("moneyPerSec",moneyPerSec); 
    savedInstanceState.putInt("moneyPerClick",moneyPerClick); 
    super.onSaveInstanceState(savedInstanceState); 

} 
public static StandFragment newInstance(String text){ 

    StandFragment f = new StandFragment(); 
    Bundle b = new Bundle(); 
    b.putString("msg", text); 

    f.setArguments(b); 

    return f; 
} 
} 

ответ

1

onSaveInstanceState() не для постоянного хранения. Остается только сохранить конкретное состояние об этом экземпляре фрагмента (например, во время изменения конфигурации или если ваше приложение убито в фоновом режиме, а фрагмент должен быть воссоздан). Если вы полностью закрываете приложение (то есть заканчиваете Activity), ваше состояние не будет сохранено, так как этот экземпляр больше не нужен.

Для постоянного хранения вы можете посмотреть либо SharedPreferences, либо SQLite, в зависимости от ваших потребностей.

+0

Хорошо, спасибо! По какой-то причине я думал, что save State State будет передавать переменные. Еще один вопрос, будет ли он работать, чтобы сохранить состояние кнопки? Как будто это было видно или нет? – Raistlin

+1

Да, но только для этого экземпляра фрагмента (так что если вы вращаете приложение, вы можете сохранить и сохранить логическое значение (состояние кнопки) и повторно применить его в 'onViewCreated()'. – kcoppock

+0

Хорошо. очень! – Raistlin

1

onSaveInstanceState() вызывается только когда Android системы, возможно, потребуется обновить, что особенно экземпляр фрагмента.

Вы должны сохранить свои данные на onSaveInstanceState() вашей деятельности

Смежные вопросы