我使用One Gulli Bulls Screen Orientation Change – Saving Focus示例在方向更改时重新获得焦点。
我的活动AddGearbox
并打开一个对话框CustomizeDialog
(与theme.dialog
合作的活动)。
该对话框有一些文本框。在onSaveInstanceState
我保存了我需要的内容,并且能够在restoreDialog
中恢复它。但重点并未恢复。
我正在记录方向更改时具有焦点的视图的ID,但我想该视图位于显示对话框的活动中,而不是在对话框本身中?
怎么办?
AddGearbox.java
public class AddGearbox extends FragmentActivity implements
MyListFragment.MyOnClickSelectedListener, DialogInterface.OnDismissListener {
CustomizeDialog customizeDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
customizeDialog = new CustomizeDialog(this);
if(savedInstanceState!=null) {
restoreDialog(savedInstanceState);
}
}
....
....
....
@Override
protected void onSaveInstanceState(Bundle saveState) {
super.onSaveInstanceState(saveState);
saveState.putBoolean("isDialogOpen",isDialogOpen);
if (isDialogOpen) {
// Save a lot of stuff
View focusedChild = getCurrentFocus();
if (focusedChild != null)
{
int focusID = focusedChild.getId();
int cursorLoc = 0;
if (focusedChild instanceof EditText)
{
cursorLoc = ((EditText) focusedChild).getSelectionStart();
}
saveState.putInt("focusID", focusID);
saveState.putInt("cursorLoc", cursorLoc);
}
}
}
private void restoreDialog(Bundle savedInstanceState) {
isDialogOpen=savedInstanceState.getBoolean("isDialogOpen");
if (isDialogOpen) {
customizeDialog = new CustomizeDialog(this);
// Restore a lot of stuff
int focusID = savedInstanceState.getInt("focusID", View.NO_ID);
View focusedChild = findViewById(focusID);
if (focusedChild != null) {
focusedChild.requestFocus();
if (focusedChild instanceof EditText) {
int cursorLoc = savedInstanceState.getInt("cursorLoc", 0);
((EditText) focusedChild).setSelection(cursorLoc);
}
}
customizeDialog.show();
}
CustomizeDialog.java
public class CustomizeDialog extends Dialog implements OnClickListener {
public CustomizeDialog(AddGearbox mainActivity) {
super(mainActivity);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.customizedialog);