【问题标题】:showDialog deprecated. What's the alternative?不推荐使用 showDialog。有什么选择?
【发布时间】:2012-05-04 07:55:48
【问题描述】:

还有什么需要调用的吗?

showDialog(TIME_DIALOG_ID);

它在 this tutorial 中,但在 Eclipse 中显示已弃用

【问题讨论】:

    标签: android dialog


    【解决方案1】:

    来自http://developer.android.com/reference/android/app/Activity.html

    public final void showDialog (int id) 在 API 级别 1 中添加

    此方法在 API 级别 13 中已弃用。使用新的 DialogFragment 改为使用 FragmentManager 类;这也适用于较旧的 平台通过 Android 兼容包。

    showDialog(int, Bundle) 的简单版本,不需要任何 论据。只需使用 null 参数调用 showDialog(int, Bundle)。

    为什么

    • 显示对话窗口的片段,浮动在其活动窗口的顶部。该片段包含一个 Dialog 对象,它会根据片段的状态适当地显示该对象。对话框的控制(决定何时显示、隐藏、关闭)应通过此处的 API 完成,而不是直接调用对话框。
    • 这是一个很好的讨论 Android DialogFragment vs Dialog
    • 另一个很好的讨论 DialogFragment advantages over AlertDialog

    如何解决?

    更多

    【讨论】:

      【解决方案2】:

      来自Activity#showDialog(int)

      此方法已弃用。
      使用带有FragmentManager 的新DialogFragment 类;这也可以通过 Android 兼容性包在旧平台上使用。

      【讨论】:

      • 所以不是调用一个简单的函数,你必须实现另一个自定义类? 叹息
      • 已弃用与消失并不相同。如果已弃用的功能仍然有效,并且在我想要支持的旧平台上没有可用的替代方案,我还是继续使用它。
      • @Edward 我认为旧平台有替代方案,请在此处查看:developer.android.com/reference/android/support/v4/app/…
      【解决方案3】:

      要显示对话框,可以使用以下代码。这是为了显示一个带有多个复选框的简单警报对话框:

      AlertDialog.Builder alertDialog= new AlertDialog.Builder(MainActivity.this); .
                  alertDialog.setTitle("this is a dialog box ");
                  alertDialog.setPositiveButton("ok", new DialogInterface.OnClickListener() {
      
                      @Override
                      public void onClick(DialogInterface dialog, int which) {
                          // TODO Auto-generated method stub
                          Toast.makeText(getBaseContext(),"ok ive wrote this 'ok' here" ,Toast.LENGTH_SHORT).show();
      
                      }
                  });
                  alertDialog.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
      
                      @Override
                      public void onClick(DialogInterface dialog, int which) {
                          // TODO Auto-generated method stub
                              Toast.makeText(getBaseContext(), "cancel ' comment same as ok'", Toast.LENGTH_SHORT).show();
      
      
                      }
                  });
                  alertDialog.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
      
                      @Override
                      public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                          // TODO Auto-generated method stub
                          Toast.makeText(getBaseContext(), items[which] +(isChecked?"clicked'again i've wrrten this click'":"unchecked"),Toast.LENGTH_SHORT).show();
      
                      }
                  });
                  alertDialog.show();
      

      标题

      如果您使用 showDialog 函数根据传递的参数显示不同的对话框或任何内容,您可以创建一个 self 函数并可以在 onClickListener() 函数下调用它。比如:

       public CharSequence[] items={"google","Apple","Kaye"};
      public boolean[] checkedItems=new boolean[items.length];
      Button bt;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          bt=(Button) findViewById(R.id.bt);
          bt.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  // TODO Auto-generated method stub
                  display(0);             
              }       
          });
      }
      

      并在函数定义中添加上面给出的对话框代码。

      【讨论】:

        【解决方案4】:

        这段代码对我有用。易于修复,但可能不是首选方式。

        public void onClick (View v) {
            createdDialog(0).show(); // Instead of showDialog(0);
        }
        
        protected Dialog createdDialog(int id) {
            // Your code
        }
        

        【讨论】:

        • 但是如何在该方法上实现 LIstener?让我们说日期和时间对话框......@MishaLee
        • 当您在 xml 中定义 onClick 属性时,Android 会为您执行此操作。
        • @gumuruh 当您在 xml 中定义 onClick 属性时,Android 会为您执行 Listener:android:onClick="onClick" 然后在 Java 中使用上述方法。如果您需要一个自定义侦听器,那么您必须自己定义一个。更多细节在这个问题link
        【解决方案5】:
        package com.keshav.datePicker_With_Hide_Future_Past_Date;
        
        import android.app.DatePickerDialog;
        import android.os.Bundle;
        import android.support.v7.app.AppCompatActivity;
        import android.view.View;
        import android.widget.DatePicker;
        import android.widget.EditText;
        
        import java.util.Calendar;
        
        public class MainActivity extends AppCompatActivity {
        
            EditText ed_date;
            int year;
            int month;
            int day;
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        
                ed_date=(EditText) findViewById(R.id.et_date);
        
                ed_date.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        Calendar mcurrentDate=Calendar.getInstance();
                        year=mcurrentDate.get(Calendar.YEAR);
                        month=mcurrentDate.get(Calendar.MONTH);
                        day=mcurrentDate.get(Calendar.DAY_OF_MONTH);
        
                        final DatePickerDialog   mDatePicker =new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener()
                        {
                            @Override
                            public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday)
                            {
                                      ed_date.setText(new StringBuilder().append(year).append("-").append(month+1).append("-").append(day));
                                    int month_k=selectedmonth+1;
        
                            }
                        },year, month, day);
                        mDatePicker.setTitle("Please select date");
                        // TODO Hide Future Date Here
                        mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());
        
                        // TODO Hide Past Date Here
                        //  mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis());
                        mDatePicker.show();
                    }
                });
            }
        }
        
        
        // Its Working 
        

        【讨论】:

          猜你喜欢
          • 2020-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-23
          • 2017-11-04
          • 2011-10-22
          • 2011-04-11
          • 2021-10-12
          相关资源
          最近更新 更多