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;
}
}
}