方向更改后,重点关注对话框中的视图

时间:2012-02-10 15:09:03

标签: android dialog focus orientation-changes

我使用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);

0 个答案:

没有答案