实现onSaveInstance和onRestoreInstance后旋转屏幕后,textView中的数据将删除

米哈伊洛·米洛舍维奇(Mihajlo Milosevic):

我已经测试了所有内容,并花了最后3个小时来修复此错误。我不为什么,但是我的应用程序从textView删除了所有数据。我做了onSaveInstance和onRestore,但这是同样的问题。

我知道我可以通过onCreate解决此问题,但我不是我真正需要做的。

public class MainActivity extends AppCompatActivity {

    EditText et_min,et_max;
    Button button;
    TextView tv_output;

    Random r;
    int min, max, output;
    static final String OUT_PUT = "output";



    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        if (output!= 0){
            savedInstanceState.putInt(OUT_PUT, 0);
        }
        super.onSaveInstanceState(savedInstanceState);
    }
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        output = savedInstanceState.getInt(OUT_PUT);
    }

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

        r = new Random();
        et_max = (EditText) findViewById(R.id.et_max);
        et_min = (EditText) findViewById(R.id.et_min);
        button = (Button) findViewById(R.id.button);
        tv_output = (TextView) findViewById(R.id.tv_output);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tempMin, tempMax;
                tempMin = et_min.getText().toString();
                tempMax = et_max.getText().toString();
                if (!tempMin.equals("") && !tempMax.equals(""))//ovde stavljam ih u poziciju gde su slobodni za pisanje
                    min = Integer.parseInt(tempMin);
                    max = Integer.parseInt(tempMax);//ova dva sluze kako bi pretvorili stringove u intove za potrebe dole methoda
                if (max > min) {
                    output = r.nextInt((max - min) + 1) + min;//nextInt sluzi kako bi dao random broj izmedju dva broja u ovom slucaju min i max
                    tv_output.setText("" + output);
                }
            }

        });
    }
}
瓦伦丁

是的,您需要使用onSaveInstanceState这种方法将保存您的textViews或其他内容中的变量。你的情况,你需要声明你的观点就像findViewByIdonSaveInstanceStateonRestoreInstanceState您可以尝试执行以下操作,此代码有效:

public class MainActivity extends AppCompatActivity {

Button Btn;
TextView textView;
String cnt = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Btn = (Button) findViewById(R.id.button);
}

public void onBtnClick(View view) {
    textView = (TextView) findViewById(R.id.textView);
    textView.setText("Hehe");
}

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    textView = (TextView) findViewById(R.id.textView);
    cnt = (String) textView.getText();
    outState.putString("count", cnt);
}

protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    cnt = savedInstanceState.getString("count");
    textView = (TextView) findViewById(R.id.textView);
    textView.setText(cnt);
}
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

旋转屏幕后,OnSaveInstance和onRestoreInstance不起作用

ExoPlayer 在片段中旋转屏幕后重新创建

移出屏幕后删除节点

在几个屏幕后删除QLineEdit

RecyclerView仅在旋转屏幕后显示

旋转屏幕后搜索到的文字消失

DrawerLayout旋转屏幕后不关闭

回到登录屏幕后,如何在更改文本后自动删除文本输入屏幕

屏幕旋转后保持 TextView 可见性 (View.INVISIBLE) 和按钮状态 (setEnabled(false))

Android中TextView的放大,缩小和旋转

按下删除按钮后,如何从输入到我的 textView 的数据库中删除值?

屏幕旋转后,Android Arch组件ViewModel和LiveData触发

旋转屏幕后,Android显示两个recyclerViews

快速旋转屏幕后如何获取视图的高度?

旋转屏幕后,Recyclerview不会调整大小

旋转屏幕后,为什么Android重新启动活动?

如何在Android的React Native中启动屏幕后删除白屏

我想删除后将数据保留在数据库中并进行跟踪。我如何实现这个目标?

屏幕旋转后,在Fragment中恢复微调器位置

点击屏幕后,应该使textView不可见的android

如何在 iOS 设备中解锁屏幕后立即激活和打开我的应用程序

将调用意图后从数据库中获取的数据设置为textview

屏幕旋转后保存意图

屏幕旋转后关闭DialogFragment

屏幕旋转后collectionView是不同的

为什么在jetpack compose中旋转屏幕时显示数据

恢复后和解锁屏幕后如何运行脚本

如何在cordova ios中启动屏幕后修复屏幕?

Android-屏幕旋转和Android中的位图错误