showDialog已弃用.有什么选择?

Den*_*nis 97 android dialog

还有什么东西应该叫吗?

showDialog(TIME_DIALOG_ID);
Run Code Online (Sandbox Code Playgroud)

它在本教程中,但在Eclipse中已弃用.

Md *_*man 90

来自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优于AlertDialog

怎么解决?

更多


Mat*_*all 8

来自Activity#showDialog(int):

不推荐使用此方法.改为
使用新DialogFragmentFragmentManager; 这也可以通过Android兼容包在旧版平台上使用.

  • 因此,您必须实现另一个自定义类,而不是调用一个简单的函数?*叹* (131认同)
  • 不推荐与过去不一样.如果已弃用的功能仍然有效,并且我想支持的旧平台上没有替代功能,我仍会继续使用它. (4认同)

Kha*_*hay 6

要显示对话框,可以使用以下代码.这是显示一个带有多个复选框的简单AlertDialog框:

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();
Run Code Online (Sandbox Code Playgroud)

标题

而如果您使用showDialog函数显示不同的对话框或根据传递的参数,您可以创建一个自我函数,并可以在该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);             
        }       
    });
}
Run Code Online (Sandbox Code Playgroud)

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