3

我一直在尝试为我的应用程序制作一个 dialogFragment,但事实证明,由于互联网上缺乏可用的示例,这很难做到。下面是我想要的类似图像的图像。 对话框片段示例

与上图类似的设计会很棒。我不确定我所做的是否正确,到目前为止,这就是我所做的。

我对 dialogFragment 的尝试

我不知道如何像第一张图片那样布置 dialogFragment,而且我不确定如何获取用户可以输入数据的字段。以下是我目前拥有的代码。

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.*;
import android.widget.Button;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;

public class Reminders extends Activity
{

    Button add, edit, remove;
    ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.reminders);
        initializeVariables();

        add.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showDialog();
            }
        });

        List<ListViewItem> items = new ArrayList<Reminders.ListViewItem>();
        items.add(new ListViewItem()
        {
            {
                ThumbnailResource = R.drawable.ic_launcher;
                Title = "Item1 Title";
                Date = "Item1 Date";
                Time = "Item1 Time";
                Amount = "£0.00";
            }
        });
        items.add(new ListViewItem()
        {
            {
                ThumbnailResource = R.drawable.ic_launcher;
                Title = "Item2 Title";
                Date = "Item2 Date";
                Time = "Item2 Time";
                Amount = "£0.00";
            }
        });

        CustomListViewAdapter adapter = new CustomListViewAdapter(this, items);
        lv.setAdapter(adapter);

    }

    private void initializeVariables()
    {
        add = (Button) findViewById(R.id.bAdd);
        edit = (Button) findViewById(R.id.bEdit);
        remove = (Button) findViewById(R.id.bRemove);
        lv = (ListView) findViewById(R.id.LVReminder);
    }

    class ListViewItem
    {
        public int ThumbnailResource;
        public String Title;
        public String Date;
        public String Time;
        public String Amount;
    }


    void showDialog() {
        DialogFragment newFragment = MyAlertDialogFragment
                .newInstance(R.string.dialog_title);
        newFragment.show(getFragmentManager(), "New");
    }

    public void doPositiveClick() {
        // Do stuff here.
        Log.i("FragmentAlertDialog", "Positive click!");
    }

    public void doNegativeClick() {
        // Do stuff here.
        Log.i("FragmentAlertDialog", "Negative click!");
    }

    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.ic_launcher)
                    .setTitle(title)
                    .setPositiveButton(R.string.alert_dialog_ok,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                                    int whichButton) {
                                    ((Reminders) getActivity())
                                            .doPositiveClick();
                                }
                            })
                    .setNegativeButton(R.string.alert_dialog_cancel,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                                    int whichButton) {
                                    ((Reminders) getActivity())
                                            .doNegativeClick();
                                }
                            }).create();
        }
    }
}

我将不胜感激有关如何获得像我提供的第一张图片中那样的 DialogFragment 的任何建议。感谢任何试图帮助我的人。

4

3 回答 3

2

您可以通过 XML 文档创建您希望实现的布局。然后从那里你可以改变你onCreateDialog的如下:

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        int title = getArguments().getInt("title");
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View v = inflater.inflate(R.layout.my_dialog_layout, null); 

        return new AlertDialog.Builder(getActivity())
                .setView(v) 
                .setIcon(R.drawable.ic_launcher)
                .setTitle(title)
                .setPositiveButton(R.string.alert_dialog_ok,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                                int whichButton) {
                                ((Reminders) getActivity())
                                        .doPositiveClick();
                            }
                        })
                .setNegativeButton(R.string.alert_dialog_cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                                int whichButton) {
                                ((Reminders) getActivity())
                                        .doNegativeClick();
                            }
                        }).create();
    }
}
于 2013-07-19T19:51:40.060 回答
1

在我看来,“对话”是一个带有对话主题的活动,试试这个:

 <activity android:theme="@android:style/Theme.Dialog">
于 2013-07-19T19:52:37.080 回答
1

我不建议创建您提供的布局,因为它对于移动设备来说太复杂了。但是可以创建每行 1 个选项的简化版本。

您可以在官方文档中查看 AlertDialog.Builder 支持的所有支持的按钮、选项等。

正如@TronicZomB 指出的那样,您可以将自己的 XML 布局与setView(View view)一起使用。

于 2013-07-19T19:53:26.530 回答