2011-03-26 39 views
1

嗨,我的应用程序我已经放置了两个编辑文本框,当我触摸它时,日期选取器对话框就会出现。Android应用程序中日期选择器的问题

现在的问题是,当我触摸第一个编辑框时,对话框打开,并在设置后显示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. 有什么办法来改变日期选择器对话框,如下图

enter image description here

请帮我在这

回答

4

检查这个代码..

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(); 
    } 
}; 

}

+0

@Siva你懂吗? – Venky 2011-03-26 09:23:21

+0

thanx很多.... – 2011-03-26 09:25:12

+0

@Venky感谢你的代码有很多帮助,但只是想知道这个showDialog已被depricated,所以如何使用Dialog fragmentas来做同样的事情 – 2013-09-23 16:23:48

1

你设置相同的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 (id) 
    { 
     case DATE_DIALOG_ID: 
     return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); 
    } 

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

+0

u能教教我,我应该有什么样的开关/ case语句做... – 2011-03-26 09:15:00