我正在构建我的第一个应用程序,我几乎完成了。(耶!)现在我所要做的就是为方向改变和键盘拔出时使用的onConfigurationChange设置Java。首先,问题是当朝向改变时所有东西都会被擦除因为一个新的新的布局被setContentView功能放在了适当的位置。这当然是有意义的,但我想知道是否有任何方法或可能的解决方案,我可以有edittext和textview值保持不变时,方向/键盘改变。我尝试过各种各样的事情,比如在setContentView之前获取字符串值,但是我发现这只会导致NullPointerException。
基本上,我试图保持edittext和textview值与方向或任何变化相同。
下面是我对引用
的代码的简要总结这不是实际的代码,只是我所做的一个总结。
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//do some stuff that is the core of the app. Nothing that would impact this question though
}
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
setContentView(R.layout.landscape);
// same code that was within the onCreate. Just doing stuff related to my app
}if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
setContentView(R.layout.main);
// same code that was within the onCreate. Just doing stuff related to my app
}
}
' }
是的,我确实在我的AndroidManifest文件中写了面向android: configChanges = " | keyboardHidden"应用程序工作像它应该,我只是没有文本视图和编辑文本正在更新。谢谢!
然而,我想知道是否有任何方法或可能的解决方案,我可以有edittext和textview值保持不变时,方向/键盘改变。
这样做…不。当你调用setContentView()
时,它会将所有内容设置为默认值,因此TextView
s将具有默认文本,等等…你可以,正如你所说的,尝试保存Strings
并再次设置它们,但这会变得混乱。你可以按照"Android推荐"的方式来操作和使用处理运行时更改。但是,我目前自己处理所有这些,但是在orientation
更改期间我不调用setContentView()
。
setContentView()
<<p> 小例子/strong> @Override
public void onConfigurationChanged(Configuration newConfig) {
newConfig = Globals.getUserLanguage(this);
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
btnSave = (Button) findViewById(R.id.lsSaveBtn);
Button btnHide = (Button) findViewById(R.id.button1);
btnHide.setVisibility(Button.GONE);
btnSave.setVisibility(Button.VISIBLE);
// btnSave.setOnClickListener();
}
else
{
btnSave = (Button) findViewById(R.id.button1);
Button btnHide = (Button) findViewById(R.id.lsSaveBtn);
btnHide.setVisibility(Button.GONE);
btnSave.setVisibility(Button.VISIBLE);
}
}
可以保存在savedInstanceState
中
当你的活动开始停止时,系统调用onSaveInstanceState()
以便你的活动可以保存状态。
要恢复该值,可以使用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // Always call the superclass first
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
// Restore value of members from saved state
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
} else {
// Probably initialize members with default values for a new instance
}
...
}
或
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
}
你也可以把你的布局放在layout
文件夹的肖像和layout-land
的风景,这样你就不需要调用setContentView()
在onConfigurationChanged()
每次应用程序restart
活动
链接:activity recreating