Как использовать showDialog() и DatePickerDialog() внутри фрагмента?

Внутри Activity я вызываю разные фрагменты, в зависимости от того, какая кнопка радио проверена, разные фрагменты открываются с разными вещами, которые пользователь должен ввести. Для этого один из пользователей должен "Установить дату" и "Установить время".

Я использую код отсюда... нажмите здесь.

Он работал нормально, когда я попробовал это в Activity... но когда я поместил код внутри фрагмента,

 showDialog(DATE_DIALOG_ID);

а также

showDialog(TIME_DIALOG_ID);

есть ошибка

Medthod showDialog (int) не определено для типа new View.OnclickListener(){

а также

return new DatePickerDialog(this, datetoperform, currentYear, currentMonth, currentDay);

имеет ошибку

Конструктор DatePickerDialog(OrderTypeGeneralOrderFragment, DatePickerDialog.OnDateSetListener, int, int, int) не определен

а также

return new TimePickerDialog(this, timeDate, hour, minute, false);

имеет ошибку

Конструктор **TimePickerDialog(OrderTypeGeneralOrderFragment, TimePickerDialog.OnTimeSetListener, int, int, boolean)** не определено

Это мой код:

package info.androidhive.slidingmenu;

import java.util.Calendar;

import android.os.Bundle;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.Fragment;
import android.app.TimePickerDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.DatePicker; 
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;

public class OrderTypeGeneralOrderFragment extends Fragment{

    private EditText subjectTextBox;


private int currentYear;
private int currentMonth;
private int currentDay;
static final int DATE_DIALOG_ID = 0;
static final int TIME_DIALOG_ID = 1;
int hour;
int minute;
private Button btDate;
private Button btTime;
private TextView timeDisplay;
private TextView dateDisplay;



            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstancesState)
            {
                return inflater.inflate(R.layout.generalorderfragment, container, false);



            }



            @Override
            public void onActivityCreated(Bundle savedInstanceState){
                super.onActivityCreated(savedInstanceState);


                 Button   btDate  =(Button)  getView().findViewById(R.id.btnDate);
                 btDate.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                               showDialog(DATE_DIALOG_ID);
                        }
                    });
                    final Calendar c = Calendar.getInstance();
                    currentYear = c.get(Calendar.YEAR);
                    currentMonth = c.get(Calendar.MONTH);
                    currentDay = c.get(Calendar.DAY_OF_MONTH);


                Button btTime = (Button) getView().findViewById(R.id.btnTime);
                btTime.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                  showDialog(TIME_DIALOG_ID);
                            }
                        });
                        final Calendar d = Calendar.getInstance();
                        hour = d.get(Calendar.HOUR_OF_DAY);
                        minute = d.get(Calendar.MINUTE);


                TextView timeDisplay = (TextView) getView().findViewById(R.id.txtTime);
                TextView dateDisplay = (TextView) getView().findViewById(R.id.txtDate);
                EditText subjectTextBox = (EditText) getView().findViewById(R.id.subjectTextBoxId);





            }













          //--DATE PICKER--//

             // Use the current date as the default date in the picker


            protected Dialog onCreateDialog4(int id) {


                    switch (id) {
                    case DATE_DIALOG_ID:
                        return new DatePickerDialog(this, datetoperform, currentYear, currentMonth, currentDay);
                    case TIME_DIALOG_ID:
                        return new TimePickerDialog(this, timeDate, hour, minute, false);
                    }
                    return null;
                }

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

                   public void onDateSet(DatePicker view, int year, int month, int day) {
                     //   if (c1.isChecked()) {

                            dateDisplay.setText("Order will be performed on: "
                                    + (month + 1) + "-" + day + "-" + year +  ".");
                      //  }
                    }



                };


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

                    public void onTimeSet(TimePicker view, int hours, int minutes) {
                        timeDisplay.setText("on " + hours + ":"
                                + minutes + ".");
                    }
                };


              /*  public boolean onCreateOptionsMenu(Menu menu) {
                    // Inflate the menu; this adds items to the action bar if it is present.
                    getMenuInflater().inflate(R.menu.activity_main, menu);
                    return true;
                }*/

                //--//DATE PICKER--//





}

Я думаю.. возможно можно поставить эту часть

protected Dialog onCreateDialog4(int id) {


                        switch (id) {
                        case DATE_DIALOG_ID:
                            return new DatePickerDialog(this, datetoperform, currentYear, currentMonth, currentDay);
                        case TIME_DIALOG_ID:
                            return new TimePickerDialog(this, timeDate, hour, minute, false);
                        }
                        return null;
                    }

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

                       public void onDateSet(DatePicker view, int year, int month, int day) {
                         //   if (c1.isChecked()) {

                                dateDisplay.setText("Order will be performed on: "
                                        + (month + 1) + "-" + day + "-" + year +  ".");
                          //  }
                        }



                    };


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

                        public void onTimeSet(TimePicker view, int hours, int minutes) {
                            timeDisplay.setText("on " + hours + ":"
                                    + minutes + ".");
                        }
                    };


                  /*  public boolean onCreateOptionsMenu(Menu menu) {
                        // Inflate the menu; this adds items to the action bar if it is present.
                        getMenuInflater().inflate(R.menu.activity_main, menu);
                        return true;
                    }*/

                    //--//DATE PICKER--//





    }

внутри деятельности, которая вызывает этот фрагмент.

если все в порядке.. как я назову эту часть в этом фрагменте?

2 ответа

Решение

Вам нужно получить дескриптор для Activity, чтобы вызвать showDialog(). Попробуйте вызвать getActivity(). ShowDialog ()

Спасибо.. Диалоги появляются сейчас:D

но

TextView timeDisplay = (TextView) getView(). FindViewById (R.id.txtTime); TextView dateDisplay = (TextView) getView (). FindViewById (R.id.txtDate);

не будет отображать выбранную дату и время.

ЭТО ВНУТРИ МОЕЙ ДЕЯТЕЛЬНОСТИ:

protected Dialog onCreateDialog(int id) {
        switch (id) {

         case DATE_DIALOG_ID:


            OnDateSetListener datetoperform = null;// i had to initialize this because datetoperform is in the fragment 



            return new DatePickerDialog(this, datetoperform, currentYear,currentMonth, currentDay);


            case TIME_DIALOG_ID2:

            OnTimeSetListener timeDate = null;// i had to initialize this because timeDate is in the fragment 
            return new TimePickerDialog(this, timeDate, hour, minute, false);

        case DIALOG_CHANGE_BACKGROUND:
            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setSingleChoiceItems(mBgNames, mChangeBGItem, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {                  
                    mChangeBGItem = which;
                    Bitmap bm = null;
                    switch(which) {
                    case 0:
                        bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.letter_bg_grass);
                        break;
                    case 1:
                        bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.letter_bg_present);
                        break;
                    case 2:
                        bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.letter_bg);
                        break;
                    case 3:
                        mSCanvas.setBGColor(0x00000000);
                        break;




                    }   
                    if(bm != null) {
                        mSCanvas.setBGImage(bm);
                    }
                    removeDialog(DIALOG_CHANGE_BACKGROUND);
                }
            });
            return builder.create();
        }
        return super.onCreateDialog(id);

OnDateSetListener datetoperform = null;

я должен был инициализировать это, потому что datetoperform находится во фрагменте

OnDateSetListener timeDate = null;

я должен был инициализировать это, потому что timeDate находится во фрагменте

внутри Фрагмент:

 public DatePickerDialog.OnDateSetListener datetoperform = new DatePickerDialog.OnDateSetListener() {

                   public void onDateSet(DatePicker view, int year, int month, int day) {
                     //   if (c1.isChecked()) {




                       dateDisplay.setText("Order will be performed on: "
                                    + (month) + "-" + day + "-" + year +  ".");
                      //  }
                    }



                };


         public TimePickerDialog.OnTimeSetListener timeDate = new TimePickerDialog.OnTimeSetListener() {

             public void onTimeSet(TimePicker view, int hours, int minutes) {
                 timeDisplay.setText("on " + hours + ":"
                         + minutes + ".");
             }
         };
Другие вопросы по тегам