如何在TextView中设置和保存字符串?

时间:2017-05-15 13:08:18

标签: android

我有一个TextView,里面有一些文字。下面是EditText,它通过按下按钮来更改TextView字段。当我回到上一张卡并返回到我更改文本的卡片时,之前更改的文本未保存。我希望TextView中已更改的文本永久存在,直到下一次编辑。

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.change_url);
    button1 = (Button) findViewById(R.id.button9);
    button2 = (Button) findViewById(R.id.button10);
    devices = (TextView) findViewById(R.id.textView);
    buildings = (TextView) findViewById(R.id.textView4);
    ed1 = (EditText) findViewById(R.id.devices);
    ed2 = (EditText) findViewById(R.id.buildings);

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String niu = ed1.getText().toString();
            devices.setText(niu);


        }
    });

}

我见过很多使用SharedPreferences和onSaveInstanceState,onRestoreInstanceState的帖子,但我不知道如何正确使用它们。有人可以让我的代码在开始时描述结果吗?我已经坐了很久没有效果了

在回答后,我编辑了这样的代码:

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.change_url);
    button1 = (Button) findViewById(R.id.button9);
    button2 = (Button) findViewById(R.id.button10);
    devices = (TextView) findViewById(R.id.textView);
    buildings = (TextView) findViewById(R.id.textView5);
    ed1 = (EditText) findViewById(R.id.devices);
    ed2 = (EditText) findViewById(R.id.buildings);

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String niu = ed1.getText().toString();
            devices.setText(niu);


        }
    });

    button2.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){

            String niu2 = ed2.getText().toString();
            devices.setText(niu2);
        }
    });

}


@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("TEXT", (String) devices.getText());
    outState.putString("TEXT2", (String) buildings.getText());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    devices.setText(savedInstanceState.getString("TEXT"));
    buildings.setText(savedInstanceState.getString("TEXT2"));

}

它不起作用?

1 个答案:

答案 0 :(得分:2)

在您的情况下,您必须使用共享首选项或在全局变量中存储值。确保你掌握了activity life cycle

使用SharedPreferences:

public void saveStringInSharedPreferences(String text) {
    // Retrieve the default shared preferences instance available to full application
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    sharedPreferences.edit().putString("KEY", "VALUE").commit();
}

检索已保存的值:

sharedPreferences.getString("KEY", "DEFAULT_VALUE");

使用onSaveInstanceState :(这不是您必须使用的上述要求)

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("TEXT", (String) textView.getText());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    textView.setText(savedInstanceState.getString("TEXT"));
}

但在使用onSaveInstanceState之前,请先阅读documentation