我创建了一个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();