【问题标题】:How to use showDialog() and DatePickerDialog() inside a Fragment?如何在 Fragment 中使用 showDialog() 和 DatePickerDialog()?
【发布时间】:2014-02-18 22:35:20
【问题描述】:

在 Activity 中,我根据选中的单选按钮调用不同的片段,打开不同的片段,用户应该输入不同的内容。 为此,用户必须“设置日期”和“设置时间”。

我正在使用这里的代码... click here.

当我在 Activity 中尝试它时它工作正常.. 但是当我将代码放入片段时,

 showDialog(DATE_DIALOG_ID);

showDialog(TIME_DIALOG_ID);

有错误

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





    }

在调用这个片段的活动内部。

如果没关系.. 我将如何在此片段中调用该部分?

【问题讨论】:

    标签: java android datepicker fragment showdialog


    【解决方案1】:

    您需要获取 Activity 的句柄才能调用 showDialog()。尝试调用 getActivity().showDialog()

    【讨论】:

      【解决方案2】:

      谢谢.. 对话现在出现了: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 + ".");
                   }
               };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-09
        • 2020-06-24
        相关资源
        最近更新 更多