2

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);
4

0 に答える 0