Skip to content

Commit

Permalink
增加自定义列表itemview的方法
Browse files Browse the repository at this point in the history
  • Loading branch information
yilylong committed Sep 18, 2017
1 parent ffeafde commit 5d6a82e
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 38 deletions.
106 changes: 71 additions & 35 deletions CBDialoglibrary/src/main/java/com/zhl/cbdialog/CBDialogBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
/**
* 类名称:对话框工具类 类描述:创建对话框的工具类,可以设置不同样式,和动画风格
* <p>
* 创建人: ZhaoHaiLong 创建时间:2012-1-20 上午10:37:55
* 创建人: zhl 创建时间:2012-1-20 上午10:37:55
*/
public class CBDialogBuilder {
public static final int INDICATOR_BallPulse = 0;
Expand Down Expand Up @@ -198,6 +198,7 @@ public class CBDialogBuilder {
*/
private int outOfTime = 10;
private onProgressOutTimeListener mProgressOutTimeListener;
private OnConvertItemViewListener convertItemViewListener;
private TextView dialogTitle, dialogMsg;
// 弹出dialog时候是否要显示阴影
private static boolean dimEnable = true;
Expand Down Expand Up @@ -780,9 +781,12 @@ public CBDialogBuilder showIcon(boolean showIcon) {

public CBDialogBuilder setItems(String[] items,
final onDialogItemClickListener listener) {
return setItems(items, listener, -1);
return setItems(items, listener,null, -1);
}
public CBDialogBuilder setItems(String[] items,
final onDialogItemClickListener listener,int selectedPos) {
return setItems(items, listener,null, selectedPos);
}

/**
* 给对话框设置一个数组列表
*
Expand All @@ -792,7 +796,7 @@ public CBDialogBuilder setItems(String[] items,
* @return
*/
public CBDialogBuilder setItems(String[] items,
final onDialogItemClickListener listener, int curSelectedPos) {
final onDialogItemClickListener listener,final OnConvertItemViewListener convertItemViewListener,int curSelectedPos) {
if (DIALOG_STYLE_CURRENT != DIALOG_STYLE_NORMAL) {
return this;
}
Expand All @@ -802,8 +806,7 @@ public CBDialogBuilder setItems(String[] items,
// 给listview 设置数据
ListView listview = getView(android.R.id.list);

// ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
// R.layout.item_option_text, items);
this.convertItemViewListener = convertItemViewListener;
final DialogItemAdapter adapter = new DialogItemAdapter(items,
curSelectedPos);
listview.setAdapter(adapter);
Expand Down Expand Up @@ -837,7 +840,7 @@ public void onItemClick(AdapterView<?> parent, View view,
public CBDialogBuilder setItems(int resId,
onDialogItemClickListener listener) {
String[] items = context.getResources().getStringArray(resId);
return setItems(items, listener, -1);
return setItems(items, listener,null, -1);
}

/**
Expand All @@ -851,7 +854,20 @@ public CBDialogBuilder setItems(int resId,
public CBDialogBuilder setItems(int resId,
onDialogItemClickListener listener, int selectedPos) {
String[] items = context.getResources().getStringArray(resId);
return setItems(items, listener, selectedPos);
return setItems(items, listener,null,selectedPos);
}
/**
* 传入一个数组资源ID
*
* @param resId
* @param listener
* @param selectedPos 当前选中项
* @return
*/
public CBDialogBuilder setItems(int resId,
onDialogItemClickListener listener,final OnConvertItemViewListener convertItemViewListener, int selectedPos) {
String[] items = context.getResources().getStringArray(resId);
return setItems(items, listener,convertItemViewListener, selectedPos);
}

/**
Expand Down Expand Up @@ -1102,10 +1118,9 @@ public CBDialogBuilder setDialogBackground(int ResID) {
return this;
}

// 内部接口监听器

/**
* 自定义监听器监听对话框按钮点击
* 监听器监听对话框按钮点击
*
* @author zhl
*/
Expand All @@ -1129,9 +1144,9 @@ public interface onDialogbtnClickListener {
}

/**
* 自定义监听器监听对话框中的选项点击
* 监听器监听对话框中的选项点击
*
* @author yan
* @author zhl
*/
public interface onDialogItemClickListener {

Expand All @@ -1146,11 +1161,28 @@ public void onDialogItemClick(DialogItemAdapter ItemAdapter,
int position);

}
/**
* the convert view listerner which used in setItems to custom itemview
*
* @author zhl
*/
public interface OnConvertItemViewListener {
/**
* convert the item view when you want custom itemview
* @param position
* @param convertView
* @param parent
*/
public View convertItemView(int position, View convertView, ViewGroup parent);

}



/**
* 进度框超时监听
*
* @author long
* @author zhl
*/
public interface onProgressOutTimeListener {

Expand Down Expand Up @@ -1193,7 +1225,7 @@ public CBDialogBuilder setCancelBackgroundResouce(int resID) {
/**
* dialog列表选项的适配器
*
* @author long
* @author zhl
*/
public class DialogItemAdapter extends BaseAdapter {
private String[] dataArrays;
Expand Down Expand Up @@ -1225,32 +1257,36 @@ public void setSelectedPos(int position) {

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.cb_item_option_text, parent, false);
viewHolder.txView = (TextView) convertView
.findViewById(R.id.item_tx);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if(convertItemViewListener!=null){
return convertItemViewListener.convertItemView(position,convertView,parent);
}else{
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.cb_item_option_text, parent, false);
viewHolder.txView = (TextView) convertView
.findViewById(R.id.item_tx);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}

viewHolder.txView.setTextColor(context.getResources().getColor(
R.color.item_text_color));
viewHolder.txView.setTextColor(context.getResources().getColor(
R.color.item_text_color));

if (position == selectedPos) {
if (position == selectedPos) {
// viewHolder.txView.setTextColor(context.getResources().getColor(
// R.color.item_text_color_pressed));
// 暂时选中不变色
viewHolder.txView
.setBackgroundResource(R.drawable.item_tx_background);
} else {
viewHolder.txView.setBackgroundResource(R.color.color_transparent);
// 暂时选中不变色
viewHolder.txView
.setBackgroundResource(R.drawable.item_tx_background);
} else {
viewHolder.txView.setBackgroundResource(R.color.color_transparent);
}
viewHolder.txView.setText(dataArrays[position]);
return convertView;
}
viewHolder.txView.setText(dataArrays[position]);
return convertView;
}

}
Expand Down
53 changes: 50 additions & 3 deletions app/src/main/java/com/zhl/sample/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

Expand Down Expand Up @@ -103,14 +107,15 @@ public void onDialogbtnClick(Context context, Dialog dialog, int whichBtn) {
.create().show();
break;
case R.id.btn_show_normal_dialog_with_items:
final String[] itemOptions = new String[]{"较小", "中等", "较大", "巨无霸"};
new CBDialogBuilder(this)
.setTouchOutSideCancelable(false)
.showConfirmButton(false)
.setTitle("选择文字大小")
.setConfirmButtonText("ok")
.setCancelButtonText("cancel")
.setDialogAnimation(CBDialogBuilder.DIALOG_ANIM_SLID_BOTTOM)
.setItems(new String[]{"较小", "中等", "较大", "巨无霸"}, new CBDialogBuilder.onDialogItemClickListener() {
.setItems(itemOptions, new CBDialogBuilder.onDialogItemClickListener() {

@Override
public void onDialogItemClick(CBDialogBuilder.DialogItemAdapter ItemAdapter,
Expand All @@ -120,6 +125,48 @@ public void onDialogItemClick(CBDialogBuilder.DialogItemAdapter ItemAdapter,
//TODO 保存选中设置
dialog.dismiss();
}
}, new CBDialogBuilder.OnConvertItemViewListener() {
class ViewHolder {
TextView txView;
}

@Override
public View convertItemView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(MainActivity.this).inflate(
R.layout.custon_item_option_text, parent, false);
viewHolder.txView = (TextView) convertView
.findViewById(R.id.item_tx);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.txView.setTextColor(ContextCompat.getColor(MainActivity.this,
R.color.item_text_color));
if (position == curSelectedItemPos) {
viewHolder.txView.setBackgroundResource(R.drawable.custom_option_item_tx_background);
} else {
viewHolder.txView.setBackgroundResource(R.color.color_transparent);
}
switch (position) {
case 0:
viewHolder.txView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
break;
case 1:
viewHolder.txView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 17);
break;
case 2:
viewHolder.txView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 19);
break;
case 3:
viewHolder.txView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21);
break;
}
viewHolder.txView.setText(itemOptions[position]);
return convertView;
}
}, curSelectedItemPos)
.create().show();
break;
Expand Down Expand Up @@ -194,10 +241,10 @@ public void onProgressOutTime(Dialog dialog, TextView dialogMsgTextView) {
.create().show();
break;
case R.id.sweetAlert_dialog_success:
new SweetAlertDialog(this, SweetAlertDialog.SUCCESS_TYPE,0.5f).show();
new SweetAlertDialog(this, SweetAlertDialog.SUCCESS_TYPE, 0.5f).show();
break;
case R.id.sweetAlert_dialog_error:
new SweetAlertDialog(this, SweetAlertDialog.ERROR_TYPE,0.7F).setCancelText("Quit").show();
new SweetAlertDialog(this, SweetAlertDialog.ERROR_TYPE, 0.7F).setCancelText("Quit").show();
break;
default:
break;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/transparent" />
<stroke
android:width="@dimen/item_rect_slected"
android:color="#302f2f" />
<corners android:radius="5dp" />
</shape>
8 changes: 8 additions & 0 deletions app/src/main/res/layout/custon_item_option_text.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_tx"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:paddingBottom="10dp"
android:paddingTop="10dp" />

0 comments on commit 5d6a82e

Please sign in to comment.