2015-05-12 3 views
2

У меня есть поле редактирования, и когда я нажимаю на него, откроется datepicker, но я не могу получить всплывающее окно datepicker при первом нажатии. Если я щелкнул поле редактирования в первый раз, датапикер не появится. Когда я нажимаю второй или третий раз, он отображается. Вот мой код:Datepicker не отображается при нажатии в первый раз

public class MainActivity extends Activity implements OnClickListener { 

    private Calendar calendar; 
    private int day; 
    private int month; 
    private int year; 

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

      setContentView(R.layout.activity);  

      date = (EditText) findViewById(R.id.date); 
      calendar = Calendar.getInstance(); 
      day = calendar.get(Calendar.DAY_OF_MONTH); 
      month = calendar.get(Calendar.MONTH); 
      year = calendar.get(Calendar.YEAR); 
      date.setOnClickListener(this); 
    } 

    @Override 
    protected Dialog onCreateDialog(int id) { 
      // TODO Auto-generated method stub 
      return new DatePickerDialog(this, datePickerListener, year, month, day);  
    } 

    private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {    
     public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { 

     date.setText(selectedYear + " - " + (selectedMonth + 1) + " - " + selectedDay); 
     } 
    }; 

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

ShowDialog() является устаревшим в течение длительного времени уже пожалуйста, рассмотреть вопрос об использовании DilaogFragment вместо – Stepango

ответ

3

в макете XML, сделать это в edittext-

android:focusableInTouchMode="false" 

это будет работать

+0

Это работает для меня, спасибо. –

0

Вам действительно не нужна операция для создания диалога. Просто создайте XML и используйте AlertDialog.

final View dialogView = View.inflate(this, R.layout.dialog_date_picker, null); 
final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 

DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.date_picker); 
     datePicker.init(mCalendar.get(Calendar.YEAR),mCalendar.get(Calendar.MONTH),mCalendar.get(Calendar.DAY_OF_MONTH),null); 

dialogView.findViewById(R.id.date_time_set).setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View view) 
    { 
    alertDialog.dismiss(); 
    } 
}); 

alertDialog.setView(dialogView); 
alertDialog.show(); 

Вот XML (dialog_date_picker.xml):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:padding="8dp" 
    android:layout_height="match_parent"> 

    <DatePicker 
     android:id="@+id/date_picker" 
     android:layout_width="match_parent" 
     android:calendarViewShown="true" 
     android:spinnersShown="false" 
     android:layout_weight="4" 
     android:layout_height="0dp" /> 

    <Button 
     android:id="@+id/date_time_set" 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:text="Set" 
     android:layout_height="0dp" /> 

</LinearLayout> 
0

If вы создаете текст редактирования программно, вы можете установить его динамически. Метод

... 
EditText editText = new EditText(); 
editText.setFocusableInTouchMode(false); 
... 
Смежные вопросы