如何在 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()
获得其他方法的价值。我需要 etText
到 onSaveInstanceState()
和 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));
}
}
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()
获得其他方法的价值。我需要 etText
到 onSaveInstanceState()
和 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));
}
}