【问题标题】:problems with date picker in an android app安卓应用中日期选择器的问题
【发布时间】:2011-03-26 07:40:53
【问题描述】:

嗨,我的应用我放置了两个编辑文本框,当我触摸它时,日期选择器对话框就会出现。

现在的问题是,当我触摸第一个编辑框时,对话框打开,设置后显示在 EditText1。然后,当我触摸第二个编辑框时,对话框打开,在设置其他日期后,它不会显示在 EditText2 中,而是显示在 EditText1 中,并且之前的日期会更改

我希望日期显示在相应的框中。

以下是我的代码

{
    et1 =(EditText)findViewById(R.id.widget29);
    et1.setHint("DOB");
    et2 =(EditText)findViewById(R.id.widget32);
    et2.setHint("DOF");

    et1.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            showDialog(DATE_DIALOG_ID);
        }
    });

    et2.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            showDialog(DATE_DIALOG_ID);
        }
    });


 // get the current date
    final Calendar c = Calendar.getInstance();
    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);

}


private void updateDisplay()
{
    this.et1.setText(
            new StringBuilder()
                    // Month is 0 based so add 1
                    .append(mMonth + 1).append("-")
                    .append(mDay).append("-")
                    .append(mYear).append("-"));
}


private void updateDisplay1()
{
    this.et2.setText(
        new StringBuilder()
                // Month is 0 based so add 1
                .append(mMonth + 1).append("-")
                .append(mDay).append("-")
                .append(mYear).append("-"));
}

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener()
    {
        public void onDateSet(DatePicker view, int year,int monthOfYear, int dayOfMonth) 
        {
            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;
            updateDisplay();
        }
    };



    private DatePickerDialog.OnDateSetListener mDateSetListener1 = new DatePickerDialog.OnDateSetListener()
    {
        public void onDateSet(DatePicker view, int year,
                              int monthOfYear, int dayOfMonth) {
            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;
            updateDisplay1();
        }
    };

    @Override
    protected Dialog onCreateDialog(int id) 
    {
       switch (id) 
       {
          case DATE_DIALOG_ID:
          return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
       }
       return null;
    }
}

以下是我在这里面临的更多问题,

  1. 每当我触摸编辑文本框时,键盘也会打开如何隐藏键盘

  2. 在 EditText 框中,我希望将订单视为年/月/日

  3. 有没有办法改变日期选择器对话框如下图

请帮帮我

【问题讨论】:

    标签: java android datepicker


    【解决方案1】:

    检查此代码..

    public class Main extends Activity {
    EditText et1,et2;
    static final int DATE_DIALOG_ID = 0;
    static final int DATE_DIALOG_ID1 = 1;
    private int mYear;
    private int mMonth;
    private int mDay;
    
    private int mYear1;
    private int mMonth1;
    private int mDay1;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        et1=(EditText)findViewById(R.id.EditText01);
        et2=(EditText)findViewById(R.id.EditText02);
    
        final Calendar c = Calendar.getInstance();
        mYear = c.get(Calendar.YEAR);
        mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH);
        et1.setText("month/year");
        et2.setText("month/year");
        et1.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                showDialog(DATE_DIALOG_ID);
                return false;
            }
        });
    
        et2.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                showDialog(DATE_DIALOG_ID1);
                return false;
            }
        });
    
    }
    
    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DATE_DIALOG_ID:
            return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
                    mDay);
    
        case DATE_DIALOG_ID1:
            return new DatePickerDialog(this, mDateSetListener1, mYear1, mMonth1,
                    mDay1);
        }
        return null;
    }
    
    // updates the date in the TextView
    
    private void updateDisplay() {
        et1.setText(new StringBuilder()
        // Month is 0 based so add 1
                .append(mMonth + 1).append("-").append(mYear));
    }
    private void updateDisplay1() {
    
        et2.setText(new StringBuilder()
        // Month is 0 based so add 1
                .append(mMonth1 + 1).append("-").append(mYear1));
    }
    // the callback received when the user "sets" the date in the dialog
    private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            // TODO Auto-generated method stub
            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;
            updateDisplay();
        }
    };
    
    private DatePickerDialog.OnDateSetListener mDateSetListener1 = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year1, int monthOfYear1,
                int dayOfMonth1) {
            // TODO Auto-generated method stub
            mYear1 = year1;
            mMonth1 = monthOfYear1;
            mDay1 = dayOfMonth1;
            updateDisplay1();
        }
    };
    

    }

    【讨论】:

    • @Venky 感谢您的代码提供了很多帮助,但只是想知道这个 showDialog 已被贬低,所以如何使用对话框片段来做同样的事情
    【解决方案2】:

    您正在为两种显示对话框方法设置相同的 id...

    et1.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            showDialog(DATE_DIALOG_ID);
        }
    });
    
    et2.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            showDialog(DATE_DIALOG_ID);
        }
    });
    

    ...而您的 switch/case 块只有一个“case”....

       switch (id) 
       {
          case DATE_DIALOG_ID:
          return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
       }
    

    至于其他问题,将它们分成单独的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      相关资源
      最近更新 更多