簡體   English   中英

從橫向/縱向旋轉時,DatePickerDialog關閉

[英]DatePickerDialog closes when rotating from landscape/portrait

我遇到了寬度DatePickerDialog的問題,因為當它打開並旋轉屏幕(橫向/縱向)時,對話框將停止。
現在,我試圖將對話框的狀態保存在Bundle中,但我真的不知道如何://

編碼:

public class ActivityNeki extends Activity {
    private int datY, datM, datD;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);
        if(savedInstanceState == null){ setTheData(); writeTheData(); }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putInt("izY", datY);
        outState.putInt("izM", datM);
        outState.putInt("izD", datD);

        super.onSaveInstanceState(outState);
    }
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        datY = savedInstanceState.getInt("izY");
        datM = savedInstanceState.getInt("izM");
        datD = savedInstanceState.getInt("izD");
        writeTheData();
    }

    public void onClickOpenDPD(View view) {    // the method that is caled from XML onClick
        DatePickerDialog dpd = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            @Override public void onDateSet(DatePicker view, int y, int m, int d) {
                datY = y; datM = m; datD = d;
                writeTheData();
            }
        }, datY, datM, datD);
        dpd.show();
    }

    public void setTheData(){
        Calendar c = Calendar.getInstance();
        datY = c.get(Calendar.YEAR);
        datM = c.get(Calendar.MONTH);
        datD = c.get(Calendar.DAY_OF_MONTH);
    }
    public void writeTheData(){
        // writes the data in a txtView
    }

}

因此,如果有人對如何執行此操作有任何想法,我將對其予以標價!

提前致謝 :)


工作解決方案:(從 Big tnx到Taig)

public class ActivityNeki extends FragmentActivity {
    /**
    * the rest of the code
    * is the same...
    * I only edited this method:
    */
    public void onClickOpenDPD(View view) {    // the method that is caled from XML onClick
        class MyDialogFragment extends DialogFragment {
            @Override public void onDestroyView() {
                if (getDialog() != null && getRetainInstance()) getDialog().setDismissMessage(null);
                super.onDestroyView();
            }
            @Override public void onCreate(Bundle state) { super.onCreate(state);
                setRetainInstance(true);
            }
            @Override public Dialog onCreateDialog(Bundle state) {
                DatePickerDialog dpd = new DatePickerDialog( getActivity(), new DatePickerDialog.OnDateSetListener() {
                    @Override public void onDateSet(DatePicker view, int y, int m, int d) {
                        datY = y; datM = m; datD = d;
                        writeTheData();
                } }, datY, datM, datD);
                return dpd;
            }
        }
        newDF = new MyDialogFragment();
        newDF.show( getSupportFragmentManager(), null );
    }
}

我建議您使用DialogFragments。

class MyDialogFragment extends DialogFragment {
    @Override
    public void onCreate( Bundle state ) {
        super.onCreate( state );

        setRetainInstance( true );
    }

    @Override
    public Dialog onCreateDialog( Bundle state ) {
        return new DatePickerDialog( ... );
    }
}

然后,在您的活動中,可以通過調用new MyDialogFragment().show( getSupportFragmentManager(), null )啟動對話框。 對話框將重新打開,您不必自己繼續更改方向的當前選擇!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM