Question

Inside an Activity, I am calling different fragments depending on which radiobutton is checked, different fragments are opened with different stuff that the user should input. For this one of the user must "Set Date" and "Set Time".

I am using the code from here... click here.

It was working fine when I tried it in an Activity.. but when I put the code inside a fragment,

 showDialog(DATE_DIALOG_ID);

and

showDialog(TIME_DIALOG_ID);

have the error

The medthod showDialog(int) is undefined for the type new View.OnclickListener(){

and

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

has the error

The constructor DatePickerDialog(OrderTypeGeneralOrderFragment, DatePickerDialog.OnDateSetListener, int, int, int) is undefined

and

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

has the error

The constructor **TimePickerDialog(OrderTypeGeneralOrderFragment, TimePickerDialog.OnTimeSetListener, int, int, boolean)** is undefined

This is my code:

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





}

I'm thinking.. maybe it is possible to put this part

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





    }

inside the activity which calls this fragment.

if that's okay.. how will i call that part in this fragment?

Was it helpful?

Solution

You need to get a handle on the Activity in order to call showDialog(). Try calling getActivity().showDialog()

OTHER TIPS

Thanks.. The dialogues show up now :D

but

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

won't display the chosen date and time.

I HAVE THIS INSIDE MY ACTIVITY:

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;

i had to initialize this because datetoperform is in the fragment

OnDateSetListener timeDate = null;

i had to initialize this because timeDate is in the fragment

inside Fragement:

 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 + ".");
             }
         };
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top