package com.jiuqi.njt.widget; import java.util.ArrayList; import com.jiuqi.njt.R; import com.jiuqi.njt.adapter.SpinnerAdaper; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.ViewGroup.LayoutParams; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ListView; import android.widget.TextView; import android.widget.CompoundButton.OnCheckedChangeListener; /** * 带ListView的对话框 可设置对话框的标题 、按钮的个数(最多2个) 对应对话框ListView子项点击事件,按钮点击事件, */ public class DialogWithList extends Dialog { public DialogWithList(Context context) { super(context); } public DialogWithList(Context context, int theme) { super(context, theme); } public static class Builder { private Context context; private String title; private String positiveButtonText; private String negativeButtonText; private View contentView; private DialogInterface.OnClickListener positiveButtonClickListener; private DialogInterface.OnClickListener negativeButtonClickListener; private String[] items; private DialogInterface.OnClickListener itemClick; private float unSelectBackColor = 0.6f; private OnDismissListener dismissListener; public Builder(Context context) { this.context = context; } /** * 设置对话框标题 * * @param title * @return */ public Builder setTitle(int title) { this.title = (String) context.getText(title); return this; } public Builder setTitle(String title) { this.title = title; return this; } public Builder setContentView(View v) { this.contentView = v; return this; } /** * 设置对话框第一个按钮的字体和点击事件 * * @param positiveButtonText * @param listener * @return */ public Builder setPositiveButton(int positiveButtonText, DialogInterface.OnClickListener listener) { this.positiveButtonText = (String) context .getText(positiveButtonText); this.positiveButtonClickListener = listener; return this; } public Builder setPositiveButton(String positiveButtonText, DialogInterface.OnClickListener listener) { this.positiveButtonText = positiveButtonText; this.positiveButtonClickListener = listener; return this; } /** * 设置对话框第二个按钮的字体和点击事件 * * @param negativeButtonText * @param listener * @return */ public Builder setNegativeButton(int negativeButtonText, DialogInterface.OnClickListener listener) { this.negativeButtonText = (String) context .getText(negativeButtonText); this.negativeButtonClickListener = listener; return this; } public Builder setNegativeButton(String negativeButtonText, DialogInterface.OnClickListener listener) { this.negativeButtonText = negativeButtonText; this.negativeButtonClickListener = listener; return this; } public void setOnDismissListener(OnDismissListener dismissListener) { this.dismissListener = dismissListener; } /** * 设置对话框列表 * * @param items * @param itemClick * @return */ public Builder setItems(String[] items, DialogInterface.OnClickListener itemClick) { this.items = items; this.itemClick = itemClick; return this; } public Builder setItems(ArrayList<String> items, DialogInterface.OnClickListener itemClick) { if(null!=items&&items.size()>0){ String[] datas = new String[items.size()]; for (int i = 0; i < items.size(); i++) { datas[i] = items.get(i); } this.items = datas; this.itemClick = itemClick; } return this; } /** * 设置对话框背景灰度 * * @param unSelectBackColor */ public void setUnSelectBackColor(float unSelectBackColor) { this.unSelectBackColor = unSelectBackColor; } private boolean showCheck; private SpinnerAdaper spinnerAdaper; private ArrayList<String> dataList; public void setDataList(ArrayList<String> dataList) { this.dataList = dataList; } /** * showCheck表示是否现在左边的单选按钮 * @param showCheck */ public void setAdapter(boolean showCheck) { this.showCheck = showCheck; } public DialogWithList create() { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // instantiate the dialog with the custom Theme final DialogWithList dialog = new DialogWithList(context, R.style.Dialog_new_new); View layout = inflater.inflate(R.layout.upfile_dialog_new, null); dialog.addContentView(layout, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); // set the dialog title ((TextView) layout.findViewById(R.id.title)).setText(title); // set the confirm button if (positiveButtonText != null) { ((Button) layout.findViewById(R.id.positiveButton)) .setText(positiveButtonText); if (positiveButtonClickListener != null) { ((Button) layout.findViewById(R.id.positiveButton)) .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { positiveButtonClickListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE); } }); } } else { // if no confirm button just set the visibility to GONE layout.findViewById(R.id.positiveButton).setVisibility( View.GONE); } // set the cancel button if (negativeButtonText != null) { ((Button) layout.findViewById(R.id.negativeButton)) .setText(negativeButtonText); if (negativeButtonClickListener != null) { ((Button) layout.findViewById(R.id.negativeButton)) .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { negativeButtonClickListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE); } }); } } else { // if no confirm button just set the visibility to GONE layout.findViewById(R.id.negativeButton).setVisibility( View.GONE); } // set the content message if (items != null) { if (showCheck ) { ArrayList<String> dataList = new ArrayList<String>(); for (int i = 0; i < items.length; i++) { dataList.add(items[i]); } spinnerAdaper = new SpinnerAdaper(context, dataList,dialog); spinnerAdaper.setItemClick(itemClick);; ((ListView) layout.findViewById(R.id.message)) .setAdapter(spinnerAdaper); } else { DialogAdapter adpAdapter = new DialogAdapter(context, items, itemClick, dialog); ((ListView) layout.findViewById(R.id.message)) .setAdapter(adpAdapter); } } else if (items != null) { ((ListView) layout.findViewById(R.id.message)) .setVisibility(View.GONE); } if (null != dismissListener) { dialog.setOnDismissListener(dismissListener); } dialog.setContentView(layout); WindowManager.LayoutParams lp = dialog.getWindow().getAttributes(); lp.dimAmount = unSelectBackColor; dialog.getWindow().setAttributes(lp); dialog.getWindow().addFlags( WindowManager.LayoutParams.FLAG_DIM_BEHIND); return dialog; } public class DialogAdapter extends BaseAdapter { private Context context; private String[] items; private LayoutInflater inflater; private DialogInterface.OnClickListener itemClick; private DialogWithList dialog; public DialogAdapter(Context context, String[] items, OnClickListener itemClick, DialogWithList dialog) { super(); this.context = context; this.items = items; this.itemClick = itemClick; this.dialog = dialog; } @Override public int getCount() { // TODO Auto-generated method stub return items.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return items[position]; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.dateitem, null); holder.message = (TextView) convertView .findViewById(R.id.date); holder.checkDate = (CheckBox) convertView .findViewById(R.id.checkBoxDate); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.checkDate.setVisibility(View.GONE); final int which = position; holder.message.setGravity(Gravity.LEFT); holder.message.setText(items[position]); holder.checkDate .setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged( CompoundButton buttonView, boolean isChecked) { // if(isChecked){ // selectedItems.add(list.get(position)); // }else{ // selectedItems.remove(list.get(position)); // } } }); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub itemClick.onClick(dialog, which); } }); return convertView; } } class ViewHolder { TextView message; CheckBox checkDate; } } }