Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

date picker dialog show on edit text double click

I have a search activity with two edit text fields. I like on edit text click date picker dialog to be show. However when I click on edit text, first the keyboard is shown, then after second click the date picker dialog is shown. Could somebody help me?

Here is activity code

package com.example.firstdemoapp.activities;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

import com.example.firstdemoapp.R;
import com.example.firstdemoapp.model.StatusDK;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;

public class SearchingTaxActivity extends Activity implements OnClickListener,
    DatePickerDialog.OnDateSetListener, OnItemSelectedListener {

private Calendar calendarFrom;
private Calendar calendarTo;
private String myFormat;
private SimpleDateFormat sdf;
private EditText dateFrom;
private EditText dateTo;

private EditText activeEditText;
private Calendar activeCalendar;

private Spinner spinnerStatusDK;
private ArrayAdapter spinnerArrayAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search_tax);

    calendarFrom = Calendar.getInstance();
    calendarTo = Calendar.getInstance();
    myFormat="dd/MM/yyyy";
    sdf = new SimpleDateFormat(myFormat, Locale.US);

    dateFrom = (EditText) findViewById(R.id.dateFrom);
    dateTo = (EditText) findViewById(R.id.dateTo);
    spinnerStatusDK=(Spinner)findViewById(R.id.spinnerStatusDK);
    spinnerArrayAdapter = new ArrayAdapter(this,
              android.R.layout.simple_spinner_item, new StatusDK[] {   
                    new StatusDK( 0, "0" ), 
                    new StatusDK( 1, "1" ), 
                    new StatusDK( 2, "2" ), 
                    });

    spinnerStatusDK.setAdapter(spinnerArrayAdapter); 
    spinnerStatusDK.setOnItemSelectedListener(this);
    dateFrom.setOnClickListener(this);
    dateTo.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if (v == dateFrom) {
        activeCalendar = calendarFrom;
        activeEditText = dateFrom;
    } else if (v == dateTo) {
        activeCalendar = calendarTo;
        activeEditText = dateTo;
    }
    new DatePickerDialog(SearchingTaxActivity.this, this,
            activeCalendar.get(Calendar.YEAR),
            activeCalendar.get(Calendar.MONTH),
            activeCalendar.get(Calendar.DAY_OF_MONTH)).show();



}

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
    // TODO Auto-generated method stub
    activeCalendar.set(Calendar.YEAR, year);
    activeCalendar.set(Calendar.MONTH, monthOfYear);
    activeCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

    if (activeEditText != null) {
        activeEditText.setText(sdf.format(activeCalendar.getTime()));
    }

}

@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    // TODO Auto-generated method stub

}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub

}

}

and the layout for the activity is:

<LinearLayout 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"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >

<TextView android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="@string/dateFromTextView"
            />
<EditText
    android:id="@+id/dateFrom"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/edit_datefrom"
     />

<TextView android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="@string/dateToTextView"
            />
<EditText
    android:id="@+id/dateTo"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/edit_dateto"
     />

<Spinner
    android:id="@+id/spinnerStatusDK"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

like image 527
vikifor Avatar asked Aug 30 '14 20:08

vikifor


2 Answers

I added android:focusableInTouchMode="false" for edit text in the xml file and this helped me. Because first focus event is fired, and then click event is fired.

like image 81
vikifor Avatar answered Sep 28 '22 21:09

vikifor


you can try to hide a keyboard using InputMethodManager class

private void hideKeyboard(EditText et) {
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(et.getWindowToken(), 0);
}
like image 36
user3806621 Avatar answered Sep 28 '22 19:09

user3806621