【问题标题】:Datepicker in EditText is having error [duplicate]EditText 中的 Datepicker 出现错误 [重复]
【发布时间】:2014-01-22 07:15:23
【问题描述】:

我对这组代码有疑问。 我从用户那里得到了这组代码,并在我自己的代码中进行了编辑。

我不知道什么是 modifiedDoctor/我不知道我应该把它改成什么。 有人能帮我吗? 请!

 public class MainActivity extends Activity {
   // TableLayout tablelayout_Log = null;
    Button saveButton = null;
    Button cancelButton = null;
   // Button searchButton = null;
    EditText dateEdit; 
    EditText priceEdit;
    EditText pumpEdit;
    TextView costView;
    EditText odometerEdit;
    TextView fconView;
     TextWatcher textWatcher;
     String priceEditStr ="",pumpEditStr="";
     String  odmEditStr = "";
     String lastOdm="";
double result;
double resultCon;




    public boolean isNumeric(String str)
    {
        return str.matches("-?\\d+(\\.\\d+)?"); 
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        costView = (TextView)findViewById(R.id.tcost);
        dateEdit = (EditText)findViewById(R.id.date);
        priceEdit = (EditText)findViewById(R.id.fuelprice);
        pumpEdit = (EditText)findViewById(R.id.fuelpump);
        odometerEdit = (EditText)findViewById(R.id.odometer);
        fconView = (TextView)findViewById(R.id.fcon);


           priceEdit.addTextChangedListener(new TextWatcher() {

               @Override
               public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

               }

               @Override
               public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

               }

               @Override
               public void afterTextChanged(Editable editable) {
                  //here, after we introduced something in the EditText we get the string from it
                   if(!priceEdit.getText().toString().trim().equalsIgnoreCase("") && !priceEdit.getText().toString().trim().equalsIgnoreCase(null))
                        priceEditStr = priceEdit.getText().toString().trim();
                   if(!pumpEdit.getText().toString().trim().equalsIgnoreCase("") && !pumpEdit.getText().toString().trim().equalsIgnoreCase(null))
                        pumpEditStr = pumpEdit.getText().toString().trim();

                  if(!priceEdit.getText().toString().trim().equalsIgnoreCase("") && !pumpEdit.getText().toString().trim().equalsIgnoreCase(""))
                  {
                    result = Double.parseDouble(priceEditStr) * Double.parseDouble(pumpEditStr);              
                    costView.setText(" "+result);
                  }

               }
           });

           pumpEdit.addTextChangedListener(new TextWatcher() {

               @Override
               public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

               }

               @Override
               public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

               }

               @Override
               public void afterTextChanged(Editable editable) {
                  //here, after we introduced something in the EditText we get the string from it
                   if(!priceEdit.getText().toString().trim().equalsIgnoreCase(""))
                        priceEditStr = priceEdit.getText().toString().trim();
                   if(!pumpEdit.getText().toString().trim().equalsIgnoreCase(""))
                        pumpEditStr = pumpEdit.getText().toString().trim();


                   if(!priceEdit.getText().toString().trim().equalsIgnoreCase("") && !pumpEdit.getText().toString().trim().equalsIgnoreCase(""))
                      {
                        result = Double.parseDouble(priceEditStr) * Double.parseDouble(pumpEditStr);              
                        costView.setText(" "+result);
                      }

               }
           });







           odometerEdit.addTextChangedListener(new TextWatcher() {
               @Override
               public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

               }

               @Override
               public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

               }



               @Override
               public void afterTextChanged(Editable editable) {
                  //here, after we introduced something in the EditText we get the string from it

                   if(!odometerEdit.getText().toString().trim().equalsIgnoreCase(""))
                       odmEditStr = odometerEdit.getText().toString().trim();


                  if(!odometerEdit.getText().toString().trim().equalsIgnoreCase("") && !pumpEdit.getText().toString().trim().equalsIgnoreCase(""))
                     {
                       resultCon = Double.parseDouble(odmEditStr) - Double.parseDouble(lastOdm) /Double.parseDouble(pumpEditStr);              
                       fconView.setText(" "+ resultCon);
                     }

               }
           });



           cancelButton = (Button) findViewById(R.id.cancelBTN);
           cancelButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    /// Create Intent for About  and start activity
                    Intent summaryView=new Intent(getApplicationContext(),summary.class);
                    startActivity(summaryView);
                    }
                });



   //Insert
        saveButton = (Button) findViewById(R.id.saveBTN);
        saveButton.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
                DBAdapter dbAdaptor = new DBAdapter(getApplicationContext());

                try
                {
                    dbAdaptor.open();
                   // String cursor = dbAdaptor.getLastOdometer();
                    String date = dateEdit.getText().toString();
                    String price = priceEdit.getText().toString();
                    String pump = pumpEdit.getText().toString();
                    String tcost = costView.getText().toString();
                    String odometer = odometerEdit.getText().toString();
                    String fcon = fconView.getText().toString();
                    dbAdaptor.insertLog(date, price, pump, tcost, odometer, fcon);
                    Intent summaryView=new Intent(getApplicationContext(),summary.class);
                    startActivity(summaryView);

                }
                catch(Exception e){
                    Log.d("Fuel Log", e.getMessage());
                }
                finally
                {
                    if(dbAdaptor != null)
                        dbAdaptor.close();
                }
            }
        });




















    }
    public void onDOBClicked(View v) {
        DatePickerDialog dialog = new DatePickerDialog(getApplicationContext(), new OnDateSetListener() {

                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                     GregorianCalendar gCalendar = new GregorianCalendar(year, monthOfYear, dayOfMonth);

            SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MMM/yyyy");

            dateEdit.setText(dateFormatter.format(gCalendar.getTime()));

                }
            }, 
            modifiedDoctor.getDobYear(), modifiedDoctor.getDobMonth(), modifiedDoctor.getDobDate());

            dialog.setTitle("Select the date");
            dialog.show();
        }

}

【问题讨论】:

标签: android date


【解决方案1】:

我建议在点击edittext时显示一个日期选择器,使edittext不可编辑。

选择任何日期应在编辑文本中显示该日期。现在流行。

public void onDOBClicked(View v) {


   Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);

DatePickerDialog dialog = new DatePickerDialog(mActivityContext, new OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        setDoctorDOB(year, monthOfYear, dayOfMonth);

        modifiedDoctor.setDobDate(dayOfMonth);
        modifiedDoctor.setDobMonth(monthOfYear);
        modifiedDoctor.setDobYear(year);
    }
}, year, month, day);

    dialog.setTitle("Select Date of Birthday");
    dialog.show();
}

现在在editText上添加这个。

android:editable="false"
android:enabled="false"
android:onClick="onDOBClicked"

【讨论】:

  • 我没有使用日期选择器
  • 是的,我知道你没有使用,但最好使用一个,所以首先避免打字,另一个没有日期验证,减少代码负载。
  • 我已经将 android:inputType="date" 放在代码 xml 中。
  • 我有点迷茫,因为这是我第一次尝试处理 android date
  • 等等...我会添加更多代码...
【解决方案2】:

您也可以在 xml 中设置android:inputType="date"

这将不允许在此字段中键入任何其他字符。但验证可以通过使用datePicker 或您可以使用regex 来完成

【讨论】:

  • 我已经这样做了
【解决方案3】:

建议你参考DatePickerandroid 方便

创建一个返回精确匹配的方法

public static boolean validateDate( String date )
           {
              return date.matches("\\b[0-9]{2}/[0-9]{2}/[0-9]{4}\\b");
           }

如果你的editText上没有setError,检查它是否返回true

if(!(validateDate(date.getText().toString()))){
            date.setError("Enter Valid date");

        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 2018-05-24
    • 2015-01-18
    • 2018-02-19
    相关资源
    最近更新 更多