2010-02-27 8 views
9

Je suis confronté à un problème que je ne sais pas comment résoudre ... J'ai une activité, lorsque je clique sur un élément particulier du menu lié à cette activité, une boîte de dialogue est affichée et utilisée pour ajouter un élément. Cet élément a une date et une heure, mais je n'arrive pas à avoir un DatePicker et un TimePicker dans cette boîte de dialogue. J'essaie également de passer l'activité à la boîte de dialogue et d'utiliser celle-ci pour afficher le calendrier., Mais cela ne fonctionne pas. Avant cela, j'ai géré la création de tels éléments dans une autre activité. Dans ce cas, cela fonctionne bien. Mais j'ai trouvé le Dialog sexy ... :-) Auriez-vous des idées? espoir Je ne suis pas trop confus ..... merci beaucoup, LucAndroid: utiliser une datepicker et un timepicker dans un Dialog

je modifier ce post pour partager le code que j'ai des difficultés avec.

J'ai une classe de base Dialog qui a essayé d'utiliser DatePicker et TimePicker. Fondamentalement, Eclipse se plaint que:

  • la showDialog est définie pour View.OnClickListener()
  • procédé onCreateDialog: La méthode onCreateDialog (int) de type EventCreateDialog doit remplacer ou mettre en œuvre une méthode de supertype
  • DatePickerDialog est indéfini (comme ce n'est pas un acitvity)

Tout ce genre de choses fonctionne à partir d'une activité, mais je ne peux pas avoir à travailler à partir d'une boîte de dialogue.

Merci beaucoup, Luc

 
package com.android.myapp; 
import ... 
public class TestDialog extends Dialog implements android.view.View.OnClickListener{ 
private TextView mDateDisplay; 
private Button mPickDate; 
private Button mPickTime; 
private int mYear; 
private int mMonth; 
private int mDay; 
private int mHour; 
private int mMinute; 
static final int DATE_DIALOG_ID = 0; 
static final int TIME_DIALOG_ID = 1; 

private Button mButton_ok; 

private Button mButton_ko; 

private ReadyListener readyListener; 

private Context context;  

    public TestDialog(Context context, ReadyListener readyListener) { 
     super(context); 
     this.context = context; 
     this.readyListener = readyListener; 
    } 

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

     mButton_ok = (Button)findViewById(R.id.button_ok); 
     mButton_ko = (Button)findViewById(R.id.button_ko); 

     // Add listeners 
     mButton_ok.setOnClickListener(this); 
     mButton_ko.setOnClickListener(this); 

      mDateDisplay = (TextView) findViewById(R.id.dateDisplay); 
      mPickDate = (Button) findViewById(R.id.pickDate); 
      mPickTime = (Button) findViewById(R.id.pickTime); 
      // add a click listener to the button 
      mPickDate.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { showDialog(DATE_DIALOG_ID); } 
      }); 
      mPickTime.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { showDialog(TIME_DIALOG_ID); } 
      }); 
      // get the current date 
      final Calendar c = Calendar.getInstance(); 
      mYear = c.get(Calendar.YEAR); 
      mMonth = c.get(Calendar.MONTH); 
      mDay = c.get(Calendar.DAY_OF_MONTH); 
      mHour = c.get(Calendar.HOUR_OF_DAY); 
      mMinute = c.get(Calendar.MINUTE); 
      updateDisplay(); 
    } 

     @Override 
     protected Dialog onCreateDialog(int id) { 
      switch (id) { 
      case DATE_DIALOG_ID: 
       return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); 
      case TIME_DIALOG_ID: 
       return new TimePickerDialog(this, mTimeSetListener, mHour, mMinute, false); 
      } 
      return null; 
     } 
     private void updateDisplay() { 
      mDateDisplay.setText(
       new StringBuilder() 
        // Month is 0 based so add 1 
        .append(mMonth + 1).append("-") 
        .append(mDay).append("-") 
        .append(mYear).append(" ") 
        .append(pad(mHour)).append(":") 
        .append(pad(mMinute))); 
     } 

     // the callback received when the user "sets" the date in the dialog 
     private DatePickerDialog.OnDateSetListener mDateSetListener = 
      new DatePickerDialog.OnDateSetListener() { 
       public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
        mYear = year; 
        mMonth = monthOfYear; 
        mDay = dayOfMonth; 
        updateDisplay(); 
       } 
     }; 

     private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
      new TimePickerDialog.OnTimeSetListener() { 
       public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
        mHour = hourOfDay; 
        mMinute = minute; 
        updateDisplay(); 
       } 
     }; 

     private static String pad(int c) { 
      if (c >= 10) 
       return String.valueOf(c); 
      else 
       return "0" + String.valueOf(c); 
     } 

    public interface ReadyListener { 
     public void ready(MyObj myObj); 
    } 

    @Override 
     public void onClick(View v) { 
     if (v == mButton_ok) { 
      // Do stuff.... 

     } 


     if(v == mButton_ko){ 
      dismiss(); 
     } 
    } 
} 

+0

Peut-être que vous pourriez partager le code qui ne semble pas fonctionner?J'ai utilisé DatePicker et TimePicker dans les boîtes de dialogue avant avec aucun problème. –

+0

Merci beaucoup, et désolé (je n'ai pas vu je reçois une réponse). Je vais partager le code, mais juste une question, quel contexte fournissez-vous à DatePicker et TimePicker lorsque vous les appelez à partir d'une boîte de dialogue? merci beaucoup, Luc – Luc

+0

Pourriez-vous s'il vous plaît partager comment cela a été résolu. J'ai le même problème. Comment afficher un TimePicker (ou une autre boîte de dialogue) sur un clic de bouton depuis un dialogue personnalisé? c'est-à-dire un dialogue provenant d'un autre dialogue? –

Répondre

0

cela devrait fonctionner:

mPickDate.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { context.showDialog(DATE_DIALOG_ID); } 
      }); 

onCreateDialog ne peut être appelé à partir d'une activité

+0

Salut, essayé ceci et cela n'a pas fonctionné –

+1

[Pickers] (http://developer.android.com/guide/topics/ui/controls/pickers.html) –

2

PickerViewSample.java

package com.sai.samples.views; 

import java.util.Calendar; 

import android.app.Activity; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.app.TimePickerDialog; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.TextView; 
import android.widget.TimePicker; 

public class PickerViewSample extends Activity { 

    static final int DATE_DIALOG_ID = 1; 
    static final int TIME_DIALOG_ID = 2; 
    private TextView dateDisplay; 
    private Button pickDate; 
    private int year, month, day; 
    private TextView timeDisplay; 
    private Button pickTime; 
    private int hours, min; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     dateDisplay = (TextView)findViewById(R.id.TextView01); 
     pickDate = (Button)findViewById(R.id.Button01); 

     pickDate.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       showDialog(DATE_DIALOG_ID); 
      } 

     }); 

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

     updateDate(); 

     timeDisplay = (TextView)findViewById(R.id.TextView02); 
     pickTime = (Button)findViewById(R.id.Button02); 

     pickTime.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       showDialog(TIME_DIALOG_ID); 

      } 

     }); 

     hours = cal.get(Calendar.HOUR); 
     min = cal.get(Calendar.MINUTE); 

     updateTime(); 
    } 

    private void updateTime() { 
     timeDisplay.setText(new StringBuilder().append(hours).append(':') 
       .append(min)); 

    } 

    private void updateDate() { 
     dateDisplay.setText(new StringBuilder().append(day).append('-') 
       .append(month + 1).append('-').append(year)); 

    } 

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

      @Override 
      public void onDateSet(DatePicker view, int yr, int monthOfYear, 
        int dayOfMonth) { 
       year = yr; 
       month = monthOfYear; 
       day = dayOfMonth; 
       updateDate(); 
      } 
    }; 

    private TimePickerDialog.OnTimeSetListener timeListener = 
     new TimePickerDialog.OnTimeSetListener() { 

      @Override 
      public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
       hours = hourOfDay; 
       min = minute; 
       updateTime(); 
      } 

    }; 
    protected Dialog onCreateDialog(int id){ 
     switch(id) { 
     case DATE_DIALOG_ID: 
      return new DatePickerDialog(this, dateListener, year, month, day); 
     case TIME_DIALOG_ID: 
      return new TimePickerDialog(this, timeListener, hours, min, false); 
     } 
     return null; 

    } 
} 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView android:text="@string/date_text" 
    android:id="@+id/TextView01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="26px" 
    android:typeface="sans"></TextView> 
<Button android:text="@string/date_button" 
    android:id="@+id/Button01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"></Button> 

<TextView android:text="@string/time_text" 
    android:id="@+id/TextView02" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="26px" 
    android:typeface="sans"></TextView> 
<Button android:text="@string/time_button" 
    android:id="@+id/Button02" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"></Button> 
</LinearLayout> 

datepickerlayout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
<DatePicker 
    android:id="@+id/DatePicker01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"></DatePicker> 
</LinearLayout> 
+2

Votre réponse est pour une activité. spécifiquement dit «Dialog». :( – Jon

3

Voici ce que j'ai cela fonctionne:

public class EditRecordDialog extends Dialog { 
    protected Context _context; 
    private Record _record; 

    public EditRecordDialog(Context context, 
          Record record) { 
    super(context); 
    _context = context; 
    _record = record 
    Button buttonDate; 
    buttonDate.setText(_record.getRecordDate()); // returns 'mm-dd-yy' 

    } // EditRecordDialog 


// showDatePickerDialog ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
private void showDatePickerDialog(View view) { 
    String dateString; 
    int year, month, day; 

    dateString = buttonDate.getText().toString(); 
    month = Integer.valueOf(dateString.substring(0, 2)) - 1; // month is zero based 
    day = Integer.valueOf(dateString.substring(3, 5)); 
    year = Integer.valueOf("20" + dateString.substring(6, 8)); 

    DatePickerDialog dpd = new DatePickerDialog(_context, dateSetListener, year, month, day); 
    dpd.show(); 

} // showDatePickerDialog ---------------------------------------------------- 


// OnDateSetListener +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { 
    @Override public void onDateSet(DatePicker view, int year, int month, int day) { 
    buttonDate.setText(ConfigObjectDAO.formatDate((month+1) + "-" + day + "-" + year)); 
    } // onDateSet 
}; // OnDateSetListener ------------------------------------------------------ 
} 
1

dans Declare variables global comme:

private int year, month, day, Hour, Minute; 

public static final int DATE_PICKER_ID = 1111; 

dans onCrea te()

// Get current date by calender 
final Calendar c = Calendar.getInstance(); 

year = c.get(Calendar.YEAR); 

month = c.get(Calendar.MONTH); 

day = c.get(Calendar.DAY_OF_MONTH); 

appel datepicker de bouton cliquez sur

showDialog(Constant.DATE_PICKER_ID); 
méthodes

:

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
     case Constant.DATE_PICKER_ID: 

      // open datepicker dialog. 
      // set date picker for current date 
      // add pickerListener listner to date picker 
      return new DatePickerDialog(this, pickerListener, year, month, day); 

     case Constant.TIME_PICKER_ID: 
      return new TimePickerDialog(this, timeSetListener, Hour, Minute, false); 
    } 
    return null; 
} 

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

    // when dialog box is closed, below method will be called. 
    @Override 
    public void onDateSet(DatePicker view, int selectedYear, 
          int selectedMonth, int selectedDay) { 

     year = selectedYear; 
     month = selectedMonth; 
     day = selectedDay; 







      text_date.setText(new StringBuilder().append(month + 1) 
        .append("/").append(day).append("/").append(year) 
        .append(" ")); 


    } 
}; 
Questions connexes