我有一个带有按钮的应用程序,用于显示所问问题的答案。还有一个带有警告文本的TextView和另一个空的文本视图,当单击按钮时将显示答案。当用户单击按钮时,我希望警告textView消失并且按钮“不可点击”。我设法实现了这一目标,并且一切都按预期工作,但是当我旋转屏幕时出现了问题,没有任何变化。 下面的代码在onCreate()中。
Button buShowAnswer = findViewById(R.id.buShowAnswer);
TextView tvShownAnswer = findViewById(R.id.tvShownAnswer);
TextView tvWarning = findViewById(R.id.tvWarning);
buShowAnswer.setOnClickListener((View v) -> {
String answer;
if (isAnswerTrue){
answer = getString(R.string.true_answer);
}else {
answer = getString(R.string.false_answer);
}
tvWarning.setVisibility(View.INVISIBLE);
buShowAnswer.setEnabled(false);
tvShownAnswer.setText(answer);
cheatState = true;
});
答案 0 :(得分:0)
屏幕旋转时会触发Oncreate()回调,请在Androidmanifest.xml中添加以下行以防止重新创建活动。
android:configChanges="keyboardHidden|orientation|screenSize
详细的移出物是here
答案 1 :(得分:0)
这很简单。您可以使用navylover或执行以下操作
1)打开清单文件
2)将android:configChages="keyboardHidden|orientation|screenSize"
添加到您的活动中,例如
<activity android:name=".MainActivity"
android:configChanges = "keyboard|orientation|screenSize"
//,并保留活动的其余代码。只需添加此行,您就可以开始使用
旋转屏幕时会发生什么?实际上,您的活动配置发生了变化,您可能会说您的活动再次创建为新活动。旋转屏幕时,它实际上会破坏您的活动并重新创建它,并且所有内容都会重置。 但这不是使用此行代码的最佳选择。您可以使用viewModal。它可以保存您的活动状态,并且当您的活动被破坏并重新创建时,与该活动链接的同一个viewModal可以帮助保存配置和保存状态
希望这对您有帮助
答案 2 :(得分:0)
旋转屏幕时,应使用onSaveInstanceState
保存局部变量的状态,然后使用onCreate
中保存的值(在旋转时调用此值以创建新的旋转活动)。
因此添加此功能
private boolean cheatState = false;
private static final String CHEAT_STATE = "CHEAT_STATE";
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putBoolean(CHEAT_STATE, cheatState);
// call superclass to save any view hierarchy
super.onSaveInstanceState(outState);
}
然后在您的onCreate
中致电
if (savedInstanceState != null) {
cheatState = savedInstanceState.getBoolean(CHEAT_STATE);
if( cheatState ) {
buShowAnswer.setEnabled(false);
tvWarning.setVisibility(View.INVISIBLE);
}
}
答案 3 :(得分:0)
我的答案与泰勒(Tyler)的回答类似,但是它可以保存和恢复可见性和启用状态。
private boolean isAnswerEnabled;
private int warningTextVisibility;
private static final String STATE_ANSWER = "state_cheat";
private static final String STATE_WARNING_VISIBILITY = "state_warning_visibility"
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(STATE_ANSWER, isAnswerEnabled);
oustState.putInt(STATE_WARNING_VISIBILITY, warningTextVisibility);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
isAnswerEnabled = savedInstanceState.getBoolean(STATE_ANSWER);
buShowAnswer.setEnabled(isAnswerEnabled);
warningTextVisibility = savedInstanceState.getInt(STATE_WARNING_VISIBILITY);
tvWarning.setVisibility(warningTextVisibility);
}
}