Android:基本对话实现

时间:2015-05-11 10:31:48

标签: java android android-dialogfragment

我已经搜索过,并为这个问题找到了很多不同的答案,但没有什么能为我解决这个问题。总计android n00b,我提前请你耐心。

I'm having trouble dealing with a FileChooser problem with Android KitKat. As per [here][1], and according to [Steve N][2] i get the impression that this file chooser problem is caused by my android version (4.4.2)

鉴于filechooser不工作,我想实现一个基本的对话框。我要检查设备的Android版本号,然后显示一条消息,引用当前缺乏支持,如果版本号在前面返回4.4。

目前,我只是使用吐司

public boolean checkVersionSupport(){
    if (Build.VERSION.RELEASE.equals("4.4.2") {
        Toast toast = Toast.makeText(context, androidOS, duration);
        toast.show();
    }
}

而不是吐司,我想要一个简单的一键式对话框打开,带一个OK按钮,我将用它将用户重定向到本机应用程序并关闭到chrome,整个文件选择器的东西似乎工作正常。

在阅读android开发人员资料后,我发现很多事情都很困难。

  1. 我是否需要对话框的布局XML文件?

  2. 我在哪里放置我正在创建的MyAlertDialogFragment类的类文件?它可以在java文件夹中的任何位置,还是必须位于子文件夹java / com.myproject中......这对将类导入我的java活动文件有什么影响?

  3. 有人可以在Android Developer Materials中解释FragmentAlertDialog的来源。

    public static class MyAlertDialogFragment extends DialogFragment {
    
    public static MyAlertDialogFragment newInstance(int title) {
        MyAlertDialogFragment frag = new MyAlertDialogFragment();
        Bundle args = new Bundle();
        args.putInt("title", title);
        frag.setArguments(args);
        return frag;
    }
    
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        int title = getArguments().getInt("title");
    
        return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.alert_dialog_icon)
                .setTitle(title)
                .setPositiveButton(R.string.alert_dialog_ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((**FragmentAlertDialog**)getActivity()).doPositiveClick();
                        }
                    }
                )
                .setNegativeButton(R.string.alert_dialog_cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((**FragmentAlertDialog**)getActivity()).doNegativeClick();
                        }
                    }
                )
                .create();
      }
    }
    
  4. 图标的最佳做法是什么?我看到有关此问题的辩论,但出于简单的目的,在对话框的顶部有一个图标,对于一个基本用法,最简单的方法是什么?我只是将文件复制到res文件夹并引用它们... 48dp?这可能是一个完全不同的问题。

1 个答案:

答案 0 :(得分:0)

  

我是否需要对话框的布局XML文件?

这实际上取决于您使用的Dialog类型。

  • AlertDialog不需要指定的布局,您只需使用AlertDialog.Builder()并设置正/负按钮,以及它如何处理。

  • DialogFragment onCreateDialog()方法是使用AlertDialog的首选方式。它也不需要XML布局,但因此,其布局仍然仅限于是/否选项:look here for complete example

  • DialogFragment onCreateView()方法允许您从指定的布局XML创建对话框。因此,如果您希望在" title,description,yes / no" 之外自定义对话框的视图,那么是的,您需要指定对话框片段的XML文件,看看here for an example,虽然建议说你应该看看ButterKnife和Otto库,以使它更好。

  

我在哪里放置我正在创建的MyAlertDialogFragment类的类文件?它可以在java文件夹中的任何位置,还是必须位于子文件夹java / com.myproject中......这对将类导入我的java活动文件有什么影响?

项目内的任何地方。虽然我更喜欢把它放在像<projectroot>/presentation/fragments/dialog这样的包装中。

  

有人可以在Android Developer Materials中解释FragmentAlertDialog的来源。

FragmentAlertDialog是一个假定的Activity,从中显示MyAlertDialogFragment对话框片段,并假设其具有方法doPositiveClick()doNegativeClick()。提供的title int很可能是/res/values/strings.xml中定义的字符串资源,用于本地化。例如,R.string.fancy_title_name

所以它就是这样的

public class FragmentAlertDialog extends AppCompatActivity {
    @Override
    public void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.activity_fragment_alert_dialog);
        //stuff
    }

    @Override
    public void onPostResume() {
        MyAlertDialogFragment madf = MyAlertDialogFragment.newInstance(R.string.something);
        madf.show(getSupportFragmentManager(), "alert-dialog-fragment");
    }
}

否则,MyAlertDialogFragment只是从DialogFragment延伸并覆盖onCreateDialog以在AlertDialog内创建DialogFragment

如果您要问,newInstance()方法是不会使用参数化构造函数的。片段不应该有参数化构造函数,它们应该用setArguments(Bundle)方法接收它们的数据。

  

图标的最佳做法是什么?

请参阅material design guidelines