2013-05-14 77 views
1
创建setAdapter()

我创建的延伸Dialog一个CustomDialogBuilder ......我想创建方法setApater() ..我创建的部分,但在适配器上的onClick方法不工作..怎样的AlertDialog

下面给出了我的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()这类似于AlertDialogsetAdapter()

这是我如何使用这个类创建对话框:

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(); 

回答

3

hureyyy ......得到了答案........

变化setAdapter功能在我们的CustomDialog class ... as

public Builder setAdapter(ListAdapter adapter,DialogInterface.OnClickListener listener) 
     { 
      this.adapter=adapter; 
      this.adapterListener=listener; 
      return this; 
     }