2017-09-15 7 views
0

Je suis aux prises avec l'ouverture d'un DatePicker tout en cliquant sur un EditText. Il ouvre le sélecteur de date au second clic uniquement. J'ai vérifié avec les options suivantes, mais rien n'a fonctionné. J'ai donné mon code avec XML ici. Veuillez me suggérer une solution pour ce problème. Presque j'essaie pour le plus.DatePicker d'ouverture dans EditText cliquez ne pas afficher au premier clic

<---XML content---> 
<EditText 
     android:id="@+id/p_date_edt" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"         
     android:layout_marginBottom="@dimen/margin_10dp" 
     android:ems="8" 
     android:hint="@string/dateTime" 
     android:focusableInTouchMode="false" /> 

Et mon code java est ici:

pDateEdt = (EditText) view.findViewById(R.id.p_date_edt); 
pDateEdt.setFocusable(false); 
pDateEdt.setOnClickListener(this); 
     ---- 

pDateEdt.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      datePicker(); 

     } 
}); 
+1

Moi aussi ayant le même problème. –

+0

Bien que le passage à un onTouchListener fonctionne, la bonne façon d'y parvenir est d'utiliser un bouton et de lui donner l'apparence d'un editText. – lionscribe

Répondre

2

Essayez cela, il va travaux sur simple clic sur edittext

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private DatePickerDialog mDatePickerDialog; 
    private EditText edDate; 

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

     edDate = (EditText) findViewById(R.id.activity_ed_date); 

     setDateTimeField(); 
     edDate.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       mDatePickerDialog.show(); 
       return false; 
      } 
     }); 
    } 

    private void setDateTimeField() { 

     Calendar newCalendar = Calendar.getInstance(); 
     mDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { 

      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
       Calendar newDate = Calendar.getInstance(); 
       newDate.set(year, monthOfYear, dayOfMonth); 
       SimpleDateFormat sd = new SimpleDateFormat("dd-MM-yyyy"); 
       final Date startDate = newDate.getTime(); 
       String fdate = sd.format(startDate); 

       edDate.setText(fdate); 

      } 
     }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)); 
     mDatePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis()); 

    } 
} 

activity_main.xml

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.demoapp.MainActivity"> 

    <EditText 
     android:id="@+id/activity_ed_date" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:focusable="false" 
     android:hint="Date" 
     android:imeOptions="actionNext" 
     android:maxLength="30" /> 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:background="@color/colorPrimary" /> 

</android.support.constraint.ConstraintLayout> 

enter image description here

+0

Est-ce que cela fonctionnera pour vous? –

0

EditText n'écoute pas OnClickListener, au lieu d'utiliser OnTouchListener, cela fonctionnera.

pDateEdt.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) {     
     datePicker(); 
     return false; 
    } 
}); 

Ou, si vous voulez utiliser OnClickListener, utilisez la méthode suivante:

<EditText 
    android:text="@+id/EditText01" 
    android:id="@+id/EditText01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:focusableInTouchMode="false" /> 
2

S'il vous plaît utiliser setOnTouchListener au lieu de setOnClickListener. S'il vous plaît utiliser ce code ci-dessous:

pDateEdt.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       switch (event.getAction()){ 
        case MotionEvent.ACTION_DOWN: 

         datePicker(); 

         break; 
       } 

       return false; 
      } 
     }); 

et s'il vous plaît supprimez cette ligne de code:

pDateEdt.setOnClickListener(this); 
0

J'ai vu beaucoup de programmeurs qui luttent pour obtenir cette fonction comme tentent. Maintenant, dans votre scénario, ce qui se passe est lorsque vous touchez Edittext pour la première fois, l'edittext passe en mode focus, et lorsque vous touchez le même edittext pour la deuxième fois, seule la méthode dans onClick, c'est-à-dire datePicker(). Donc ce que vous êtes censé faire est de simplement supprimer la balise android:focusableInTouchMode="false" et en place de cette balise il suffit d'ajouter la balise android:focusable="false" et dans votre code Java font exactement le suivant

pDateEdt = (EditText) view.findViewById(R.id.p_date_edt); 
pDateEdt.setOnClickListener(this); 
@Override 
public void onClick(View v) { 
    datePicker(); 
} 

J'espère que votre code fonctionnera bien et laissera le sélecteur de date ouvert sur votre premier contact.