日期选择器编辑文本的触摸对话事件

时间:2012-05-23 10:43:31

标签: android date

我已在下面附上我的代码。我希望在编辑文本的触摸事件事件中获得日期选择器的对话。我没有得到任何错误但也没有得到任何日期对话。

请帮助我,我错了。提前完成。

String TAG = "AdvancedSearchActivity";
EditText txtArrCity, txtDepCity, txtDate, txtTime;
public String year, month, day;
public static final int DATE_DIALOG_ID = 1;
// OnDateSetListener dateListener;
String DATE;

/*
 * (non-Javadoc)
 * 
 * @see android.app.Activity#onCreate(android.os.Bundle)
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.advance_search);

    txtArrCity = (EditText) findViewById(R.id.edittxt_ArrCity);
    txtDepCity = (EditText) findViewById(R.id.edittxt_DepCity);
    txtDate = (EditText) findViewById(R.id.edittxt_Date);
    txtTime = (EditText) findViewById(R.id.edittxt_Time);

    Calendar cal = Calendar.getInstance();
    year = String.valueOf(cal.get(Calendar.YEAR));
    month = String.valueOf(cal.get(Calendar.MONTH));
    day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));

    Log.i(TAG, "Year" + year);
    Log.i(TAG, "month" + (month + 1));
    Log.i(TAG, "Day" + day);
    updateDate();

    txtDate.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            showDialog(DATE_DIALOG_ID);
            Log.i(TAG, "Inside On touch");
            return false;
        }
    });

}

protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(TabSample.tabcontext,
                dateListener, Integer.parseInt(year),
                Integer.parseInt(month), Integer.parseInt(day));

    }
    return null;

}

// the callback received when the user "sets" the date in the dialog
private DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int years, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub
        year = String.valueOf(years);
        month = String.valueOf(monthOfYear);
        day = String.valueOf(dayOfMonth);
        updateDate();
    }
};

private void updateDate() {

    month = String.valueOf((Integer.parseInt(month) + 1));
    if ((Integer.parseInt(month)) < 10) {
        Log.i(TAG, "@@@@@ month" + month);
        month = "0" + month;
        Log.i(TAG, "@@@@@ AFTER month" + month + " MONTH S" + month);
    }
    day = String.valueOf(day);
    if ((Integer.parseInt(day)) < 10) {
        day = "0" + day;
    }
    DATE = year + "-" + month + "-" + day;

    Log.i(TAG, "DATE : " + DATE);
    txtDate.setText(DATE);
}

2 个答案:

答案 0 :(得分:5)

试试这个

 public class name extends Activity {   
     private EditText dob;
        static final int DATE_DIALOG_ID = 0;
        @Override
            protected Dialog onCreateDialog(int id) {
                Calendar c = Calendar.getInstance();
                int cyear = c.get(Calendar.YEAR);
                int cmonth = c.get(Calendar.MONTH);
                int cday = c.get(Calendar.DAY_OF_MONTH);
                switch (id) {
                case DATE_DIALOG_ID:
                    return new DatePickerDialog(this,  mDateSetListener,  cyear, cmonth, cday);
                }
                return null;
            }
            private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
                // onDateSet method
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                    String date_selected = String.valueOf(dayOfMonth)+" /"+String.valueOf(monthOfYear+1)+" /"+String.valueOf(year);
                    //Toast.makeText(getApplicationContext(), "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
                    dob.setText(date_selected);
                }
            };
        @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.bankregform);
            dob=(EditText)findViewById(R.id.dob);
        /* For DOB EditText*/
                dob.setOnTouchListener(new OnTouchListener(){ 
                    public boolean onTouch(View v, MotionEvent event) { 
                        if(v == dob)
                            showDialog(DATE_DIALOG_ID);
                        return false;              
                    }
                });
        }
    }

答案 1 :(得分:0)

试试这个...` activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >



<EditText
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusableInTouchMode="false"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="36dp"
    android:layout_marginTop="36dp"
    android:ems="10"
    android:inputType="date" />


 </RelativeLayout>

MainActivity.java

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.DatePicker;
import android.widget.EditText;

public class MainActivity extends Activity {
static final int DATE_DIALOG_ID = 0;
private int mYear,mMonth,mDay;
EditText editText;

@SuppressWarnings("deprecation")
@SuppressLint("SimpleDateFormat")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Calendar c=Calendar.getInstance();
    mYear=c.get(Calendar.YEAR);
    mMonth=c.get(Calendar.MONTH);
    mDay=c.get(Calendar.DAY_OF_MONTH);
    //String dateFormat = "dd/MM/yyyy";
    editText = (EditText) findViewById(R.id.text);
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    editText.setText( sdf.format(c.getTime()));

    editText.setOnClickListener(new OnClickListener() {



        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            showDialog(DATE_DIALOG_ID);

        }
    });


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

        }

        return null;

    }


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

        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;


editText.setText(new StringBuilder().append(mDay).append("/").append(mMonth+1).append("/").append(mYear));
        }

    };



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

`