2014-08-30 9 views
6

Ho un'attività di ricerca con due campi di testo di modifica. Mi piace per la finestra di dialogo di selezione della data di selezione del testo da mostrare. Tuttavia, quando faccio clic su Modifica testo, prima viene mostrata la tastiera, quindi dopo il secondo clic viene visualizzata la finestra di dialogo Selezione data. Qualcuno potrebbe aiutarmi?finestra di dialogo selezione data mostra sul testo di modifica doppio clic

Ecco codice attività

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 

} 

}

e il layout per l'attività è:

<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" /> 

risposta

30

Ho aggiunto android: focusableInTouchMode = "false" per modificare il testo nel file xml e questo mi ha aiutato. Perché viene attivato il primo evento di attivazione, quindi viene fatto clic sull'evento.

0

si può cercare di nascondere una tastiera utilizzando InputMethodManager classe

private void hideKeyboard(EditText et) { 
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(et.getWindowToken(), 0); 
} 
+0

Il mio problema è che non mi piace di cliccare due volte sulla modifica del testo per mostrare dialogo selezione data – vikifor

+0

E 'possibile per chiamare una finestra di dialogo di selezione data dall'evento 1 ° clic su EditText. – user3806621

0

Questa è la soluzione migliore che è molto utile per l'open DatePicker & TimePicker Dialog da EditText qualsiasi,

editdate.setFocusable(false); 
editdate.setKeyListener(null); 
Problemi correlati