如何在 Android Studio 中将字符串值从 Onclick() 获取到 onSaveInstanceState()

How to get string value from Onclick() to onSaveInstanceState() in Android Studio

public class MainActivity extends AppCompatActivity implements View.OnClickListener
{
    Button buttonshow;
    EditText edittextname;
    TextView textviewshow;
    String etText;

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

        buttonshow = findViewById(R.id.buttonShow);
        edittextname = findViewById(R.id.editTextName);
        textviewshow = findViewById(R.id.textViewShow);

        buttonshow.setOnClickListener(this);
    }

    @Override
    public void onClick(View v)
    {

        etText = edittextname.getText().toString();
        if (v.getId() == R.id.buttonShow)
        {
            textviewshow.setText(etText);
        }
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState)
    {
        super.onSaveInstanceState(outState);
        outState.putString("textname", etText);
    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState)
    {
        super.onRestoreInstanceState(savedInstanceState);
        etText = savedInstanceState.getString("textname");
    }
}

我正在学习 onSaveInstanceState()onRestoreInstanceState() 的使用。所以当我的 activity 变成风景时,我可以恢复字符串。但是我无法从 Onclick() 获得其他方法的价值。我需要 etTextonSaveInstanceState()onRestoreInstanceState() 的字符串值。否则,这些方法不起作用。当 activity 转向横向时,我无法恢复此字符串值。

这样做:

public class MainActivity extends AppCompatActivity
{
    private final String TEXT_KEY = "TEXT_KEY";
    Button buttonshow;
    EditText edittextname;
    TextView textviewshow;
    String etText;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("MyTag", "onCreate");

        buttonshow = findViewById(R.id.buttonShow);
        edittextname = findViewById(R.id.editTextName);
        textviewshow = findViewById(R.id.textViewShow);

        buttonshow.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                etText = edittextname.getText().toString();
                textviewshow.setText(etText);
            }
        });
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState)
    {
        super.onSaveInstanceState(outState);
        Log.d("MyTag", "onSaveInstanceState");
        outState.putString(TEXT_KEY, etText);
    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState)
    {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d("MyTag", "onRestoreInstanceState");
        etText = savedInstanceState.getString(TEXT_KEY);
        textviewshow.setText(etText);
    }
}

恢复变量时必须将其设置到视图。


你也不需要 ettext 变量,这样更清楚你可以这样做(我没有实现 OnClickListenner 并在代码中设置它,我认为这是一个更好的方法这样做):

public class MainActivity extends AppCompatActivity
{
    private final String TEXT_KEY = "TEXT_KEY";
    Button buttonshow;
    EditText edittextname;
    TextView textviewshow;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("MyTag", "onCreate");

        buttonshow = findViewById(R.id.buttonShow);
        edittextname = findViewById(R.id.editTextName);
        textviewshow = findViewById(R.id.textViewShow);

        buttonshow.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                textviewshow.setText(edittextname.getText().toString());
            }
        });
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState)
    {
        super.onSaveInstanceState(outState);
        Log.d("MyTag", "onSaveInstanceState");
        outState.putString(TEXT_KEY, textviewshow.getText().toString());
    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState)
    {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d("MyTag", "onRestoreInstanceState");
        textviewshow.setText(savedInstanceState.getString(TEXT_KEY));
    }
}