Android:从DatePicker / Date Set获取返回值

时间:2013-04-28 10:43:41

标签: android

我的页面上有两个按钮。按下按钮时,将打开dater picker对话框。单击DONE of date picker时,我想将我的按钮文本设置为用户选择的日期。

我想使用datepicker的单个函数来执行此操作。

我的代码:

final Button fromdate = (Button) dialog.findViewById(R.id.ButtonTripConfigureFrom);     
    fromdate.setOnClickListener(new OnClickListener()
    {                   
        public void onClick(View v)
            {                           
                showDialog(0);     
                fromdate.setText(date);
            }
     });

final Button tilldate = (Button) dialog.findViewById(R.id.ButtonTripConfigureTo);       
    tilldate.setOnClickListener(new OnClickListener()
    {                   
        public void onClick(View v)
            {                           
                showDialog(0);  
                tilldate.setText(date);
            }
     });

protected Dialog onCreateDialog(int id) 
    {   
        final Calendar c = Calendar.getInstance();
        int myYear = c.get(Calendar.YEAR);
        int myMonth = c.get(Calendar.MONTH);
        int myDay = c.get(Calendar.DAY_OF_MONTH);

    return new DatePickerDialog(this,myDateSetListener,myYear, myMonth, myDay);
}

private DatePickerDialog.OnDateSetListener myDateSetListener = new DatePickerDialog.OnDateSetListener()
{
    public void onDateSet(DatePicker view, int year, int month, int day) 
    {           
       date = day + "/" + (month+1) +"/"+ year;                    
    } 
};

但是,执行此操作时,不会显示用户选择的值。只有当我再次按下按钮时才会显示。(按钮的settext正在用户按下DOUND of datepicker之前执行)

我检查的所有解决方案都表明在dateset功能中进行了修改。但由于我有两个不同的按钮,我不能在dateset函数中使用按钮的settext。

是否有任何方法可以通过日期设置函数返回值,或者将参数传递给dateset的方式,然后在ifset内使用if。

2 个答案:

答案 0 :(得分:1)

您只有在点击它时才更新fromdate Button。这就是为什么当你再次点击它时它会更新... 要在设置日期时更新它,您必须在myDateSetListener.onDateSet中更改其文本,但是因为您有两个按钮,请在按钮中设置一些值。单击以记住单击了哪个按钮:



    mFromdate = (Button) dialog.findViewById(R.id.ButtonTripConfigureFrom);     
    mFromdate.setOnClickListener(new OnClickListener()
    {                   
        public void onClick(View v)
            {                           
                showDialog(0);
                mButtonClicked = 0;
            }
    });

    mTilldate = (Button) dialog.findViewById(R.id.ButtonTripConfigureTo);       
    mTilldate.setOnClickListener(new OnClickListener()
    {                   
        public void onClick(View v)
            {                           
                showDialog(0);
                mButtonClicked = 1;
            }
    });

    private DatePickerDialog.OnDateSetListener myDateSetListener = new DatePickerDialog.OnDateSetListener()
    {

        public void onDateSet(DatePicker view, int year, int month, int day) 
        {         
            if(mButtonClicked == 0)
                mFromdate.setText(day + "/" + (month+1) +"/"+ year);
            else if(mButtonClicked == 1)  
                mTillDate.setText(day + "/" + (month+1) +"/"+ year);           
        } 

    };

此外,制作班级的mFromdate,mTilldate和mButtonclicked字段;)

答案 1 :(得分:0)

我现在所能想到的只有: -

static int buttonClicked;    
final Button fromdate = (Button) dialog.findViewById(R.id.ButtonTripConfigureFrom);     
        fromdate.setOnClickListener(new OnClickListener()
        {                   
            public void onClick(View v)
                {      
                    buttonClicked = fromDate.getId();
                    showDialog(0);
                }
         });

final Button tilldate = (Button) dialog.findViewById(R.id.ButtonTripConfigureTo);       
    tilldate.setOnClickListener(new OnClickListener()
    {                   
        public void onClick(View v)
            {        
                buttonClicked = tillDate.getId();                   
                showDialog(0);
            }
     });

protected Dialog onCreateDialog(int id) 
    {   
        final Calendar c = Calendar.getInstance();
        int myYear = c.get(Calendar.YEAR);
        int myMonth = c.get(Calendar.MONTH);
        int myDay = c.get(Calendar.DAY_OF_MONTH);

    return new DatePickerDialog(this,myDateSetListener,myYear, myMonth, myDay);
}

private DatePickerDialog.OnDateSetListener myDateSetListener = new DatePickerDialog.OnDateSetListener()
{
    public void onDateSet(DatePicker view, int year, int month, int day) 
    {           
       date = day + "/" + (month+1) +"/"+ year; 
       Button btn = (Button) dialog. findViewById(buttonClicked);  //assuming the dialog in which the button is a class level variable.. 
       btn.setText(date);                   
    } 
};

这绝对应该这样做。 :)

编辑 - 我对你的代码所做的是我存储了按下的按钮的id。然后在onDateSet()方法中从此存储的id中检索按钮,并将所选日期设置为该Button的文本..