我的活动有一个ImageView。它从拍照行动中获取图像。此活动有两种布局。
在清单中,有:
我的问题是,如果我删除
create or replace trigger "INKOOPORDER_T1"
AFTER insert or update or delete on INKOOPORDER
for each row
begin
INSERT INTO INKOOPORDERREGEL
(I_nummer)
SELECT
I_nummer
FROM inkooporderregel;
end;
数据不会保存,但如果没有,则form_layout.xml(land)不会加载。 screenRotate上的加载是默认的横向布局。
如何解决我的问题,即在使用保存的数据轮换后加载新的xml布局?
更新
我不想保留
configChanges="orientation|keyboardHidden|screenSize"
答案 0 :(得分:2)
如果您想保留configChanges="orientation|keyboardHidden|screenSize"
,则需要再次手动拨打setContentView
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//Get last state
String text = et1.getText().toString();
//Create new view according to layout
setContentView(R.layout.activity_login);
// Restore last state
et1 = (EditText) findViewById(R.id.et1);
et1.setText(text);
}
否则,最好的办法是将数据保存到捆绑onSaveInstanceState
并在onCreate
请参阅此处http://developer.android.com/training/basics/activity-lifecycle/recreating.html
static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
...
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
@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
}
...
}
答案 1 :(得分:1)
问题解决了!
让我解释一下。当你添加
android:configChanges="orientation|keyboardHidden|screenSize"
您声明,任何更改都将手动完成,因此最好从此解决方案中退出另一个更改,我将在下面介绍。
我的问题是保持更复杂 - 然后是文本 - 内容从一个布局到另一个布局。关键是,方向或屏幕尺寸的变化会导致活动破坏。再次创建destroy活动后,调用onCreate方法并再次运行活动生命周期。
如果数据无法从数据库中恢复,那么将每个数据放入一个包中是一种很好的做法。
让mi告诉你我的代码:
@Override
public void onSaveInstanceState(Bundle outState){
Log.d("debug", "onSaveInstanceState");
super.onSaveInstanceState(outState);
if(pictureAdded){
outState.putBoolean(ADDED, true);
outState.putString(PATH, currentPhotoPath);
}else{
outState.putBoolean(ADDED, false);
}
}
pictureAdded是我的标志,如果用户已拍照,则为真,因此图片存储在内存中,并且存在文件路径。
在destroy之前调用此方法。在创建时,我们想要检查它是否是第一次创建活动,或者至少是否曾在之前拍摄过照片。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.form_layout);
pictureAdded = false;
if (savedInstanceState == null){
return;
}
if (savedInstanceState.containsKey(ADDED)){
if (savedInstanceState.getBoolean(ADDED)){
try{
currentPhotoPath = savedInstanceState.getString(PATH);
photoPreview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
photoPreview.getViewTreeObserver().removeOnGlobalLayoutListener(this);
setPic();
}
});
}catch (Exception e){
e.printStackTrace();
}
}
}
}
onCreate()方法的第一部分通常是。然后你必须检查是否存在捆绑。然后,当且仅当密钥存在时,才能使用存储在密钥中的数据。
当我们希望将图片添加到ImageView时,事情变得越来越困难。为什么?因为此时,imageView的尺寸为0px x 0px。怎么解决?解决方案发布在上面。使用treeobserver模式。这部分代码为您提供了
中的代码@Override
public void onGlobalLayout(){
//here
}
将在创建布局后立即调用,因此它的部件具有尺寸。如果您希望执行一次代码,请删除onGlobalLayoutListener。
希望,能帮助别人。
答案 2 :(得分:0)