Я использую One Gulli Bulls Изменение ориентации экрана - сохранение фокуса * Пример 1002 * для восстановления фокуса при изменении ориентации.
Моя активность AddGearbox
и открывает диалоговое окно CustomizeDialog
(активность с theme.dialog
).
В диалоговом окне есть несколько текстовых полей. В onSaveInstanceState
я сохраняю то, что мне нужно, и могу восстановить его в restoreDialog
. Но фокус не восстанавливается.
Я регистрирую идентификатор представления, которое имеет фокус при изменении ориентации, но я предполагаю, что представление находится в активности, показывающей диалог, а не в самом диалоге?
Что делать?
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);