首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InstanceState不储蓄

InstanceState不储蓄
EN

Stack Overflow用户
提问于 2014-10-13 18:27:31
回答 2查看 33关注 0票数 0

我不明白为什么当应用程序关闭时,我的包SavedInstanceState不保存。很可能只是一些我不知道的愚蠢的事情!主要活动中没有太多内容,只是一个用于转换屏幕的页面适配器,因为这是我将要尝试的工作的主要部分。现在大部分代码都在我的StandFragment.java中,这是打开应用程序时出现的第一页。那就是保存状态之类的东西。

MainActivity:公共类MainActivity扩展FragmentActivity {

代码语言:javascript
复制
@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:

代码语言:javascript
复制
      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;
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-13 18:36:45

onSaveInstanceState()不是用于持久存储的。只有在那里保存关于片段实例的特定状态(例如,在配置更改期间,或者如果您的应用程序在后台被杀死,并且应该重新创建该片段)。如果您要完全关闭应用程序(即完成Activity),那么您的状态将不会被保存,因为不再需要该实例。

对于持久存储,您可以根据需要查看SharedPreferencesSQLite

票数 1
EN

Stack Overflow用户

发布于 2014-10-13 18:31:14

只有当安卓系统需要重新创建片段的特定实例时,才会调用onSaveInstanceState()。

您必须将数据保存在活动的onSaveInstanceState()上

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26346490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档