2

我创建了一个CustomDialogBuilder扩展Dialog...我想创建方法setApater()..我创建了那个部分但是onClick适配器上的方法不起作用..

我的customDialogBuilder课程如下。

public class CustomAlertDialog extends Dialog 
{
    public CustomAlertDialog(Context c, int theme) {
        super(c, theme);
    }
    public static class Builder 
    {
        private Context context;
        private String title;
        private String message;
        private String positiveButtonText;
        private String negativeButtonText;
        private View contentView;
        private ListAdapter adapter;
        private  ListView listView;
        private DialogInterface.OnClickListener 
                        positiveButtonClickListener,
                        negativeButtonClickListener,adapterListener;
        public Builder(Context c)
        {
            context =c;
        }
        public Builder setTitle(String title)
        {
            this.title =title;
            return this;
        }
        public Builder setMessage(String message) {
            this.message = message;
            return this;
        }
        public Builder setContentView(View v)
        {
            contentView =v;
            return this;
        }
        public Builder setAdapter(ListAdapter adapter,DialogInterface.OnClickListener listener)
        {
            this.adapter=adapter;
            return this;
        }
        public Builder setPositiveButton(String positiveButtonText,
                DialogInterface.OnClickListener listener) {
            this.positiveButtonText = positiveButtonText;
            this.positiveButtonClickListener = listener;
            return this;
        }
        public Builder setNegativeButton(String negativeButtonText,
                DialogInterface.OnClickListener listener) {
            this.negativeButtonText = negativeButtonText;
            this.negativeButtonClickListener = listener;
            return this;
        }
        public CustomAlertDialog create()
        {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final CustomAlertDialog dialog = new CustomAlertDialog(context, 
                    R.style.Dialog);
            View layout = inflater.inflate(R.layout.dialog_title_layout, null);
            dialog.addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
            ((TextView) layout.findViewById(R.id.tv_custom_dialog_title)).setText(title);
            if (positiveButtonText != null) {
                ((Button) layout.findViewById(R.id.bt_custom_dialog_positive))
                        .setText(positiveButtonText);
                if (positiveButtonClickListener != null) {
                    ((Button) layout.findViewById(R.id.bt_custom_dialog_positive))
                            .setOnClickListener(new View.OnClickListener() {
                                public void onClick(View v) {
                                    positiveButtonClickListener.onClick(
                                            dialog, 
                                            DialogInterface.BUTTON_POSITIVE);
                                }
                            });
                }
            }
            else
                layout.findViewById(R.id.bt_custom_dialog_positive).setVisibility(
                        View.GONE);
             if (negativeButtonText != null) {
                 ((Button) layout.findViewById(R.id.bt_custom_dialog_negative))
                         .setText(negativeButtonText);
                 if (negativeButtonClickListener != null) {
                     ((Button) layout.findViewById(R.id.bt_custom_dialog_negative))
                             .setOnClickListener(new View.OnClickListener() {
                                 public void onClick(View v) {
                                     positiveButtonClickListener.onClick(
                                            dialog, 
                                             DialogInterface.BUTTON_NEGATIVE);
                                 }
                             });
                 }
             } else {
                 // if no confirm button just set the visibility to GONE
                 layout.findViewById(R.id.bt_custom_dialog_negative).setVisibility(
                         View.GONE);
             }
             if (message != null) {
                 ((TextView) layout.findViewById(
                        R.id.tv_custom_dilaog_message)).setText(message);
             }
             else if(adapter!=null)
             {
                 listView = new ListView(context);
                 listView.setAdapter(adapter);
                 ((LinearLayout) layout.findViewById(R.id.Layout_custom_dialog_content))
                 .removeAllViews();
         ((LinearLayout) layout.findViewById(R.id.Layout_custom_dialog_content))
         .addView(listView);
         if(adapterListener!=null)
         {
             listView.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {


                }
            });
         }

             }
             else if (contentView != null) {
                 // if no message set
                 // add the contentView to the dialog body
                 ((LinearLayout) layout.findViewById(R.id.Layout_custom_dialog_content))
                         .removeAllViews();
                 ((LinearLayout) layout.findViewById(R.id.Layout_custom_dialog_content))
                         .addView(contentView, 
                                 new LayoutParams(
                                         LayoutParams.WRAP_CONTENT, 
                                         LayoutParams.WRAP_CONTENT));
             }
            return dialog;
        }
    }
}

我们如何创建setAdapter()类似于setAdapter()in的正确的AlertDialog

这就是我使用此类创建对话框的方式:

Dialog dialog = null;
                    String[] items = {"Edit profile","Change doctor","Change password","Logout"};
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(Loged.this,
                            R.layout.my_spinner_layout, items);

                CustomAlertDialog.Builder customBuilder = new
                        CustomAlertDialog.Builder(Loged.this);
                    customBuilder.setTitle("Options")
                       .setAdapter(adapter, new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int which) {
                            Log.e("dis",""+which);

                        }
                    });
                    dialog = customBuilder.create();
                    dialog.show();
4

1 回答 1

3

hureyyy……得到了答案…………

将我们的 CustomDialog 类中的 setAdapter 函数更改为...

public Builder setAdapter(ListAdapter adapter,DialogInterface.OnClickListener listener)
        {
            this.adapter=adapter;
            this.adapterListener=listener;
            return this;
        }
于 2013-05-18T09:38:18.810 回答