发一下自己写的几个Adapter基类

自己今年整理出来的Adapter类,已经实现:分组列表->图片列表节点、时间节点、链接节点->列表项目的编辑:文字、选择项、地理位置选择(高德地图)、图片列表选择。现在在我的Android项目中正常在用。今天只发对应的Adapter类,其中使用的其他类,忙完这几天,再抽时间整理一下,发个Demo出来。。

package com.cssg.android;

import java.util.ArrayList;

import com.cssg.android.utils.Utils;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 分组列表显示适配器
 * 支持加载更多按钮
 * 2015-10-22 14:57 何洪滔 增加未加载数据时的提示
 * 2016-02-25 15:36 何洪滔 添加设置分组间隔背景方法,包括设置背景图片、资源或者颜色
 * 2016-06-28 11:56 何洪滔 增加视图缓存方法
 * @author cubar
 *
 */
public class GroupAdapter extends BaseAdapter {
	
	private final String TAG = "GroupAdapter";
	/**
	 * 数据列表
	 */
	private ArrayList<Object> data;
	/**
	 * 布局管理器
	 */
	protected LayoutInflater inflater = null;
	/**
	 * 是否显示加载更多数据按钮
	 */
	protected boolean _Bln_HasLoadMoreButton = false;
	/**
	 * 更多按钮文字
	 * 默认:加载更多
	 */
	protected String _Str_MoreButton = "加载更多";
	/**
	 * 控件上下文
	 */
	private Context context;
	/**
	 * 获取控件的上下文
	 * @return
	 */
	protected Context getContext(){
		return context;
	}
	/**
	 * 未加载数据前的提示信息
	 */
	private String _Str_MessageBeforLoad = "暂未加载数据";
	/**
	 * 没有任何数据的提示信息
	 */
	private String _Str_MessageNoData = "没有任何数据";
	/**
	 * 设置未加载数据前的提示信息
	 * @param message
	 * 		提示信息
	 */
	public void setMessageBeforLoad(String message){
		_Str_MessageBeforLoad = message;
		if(message == null || message == ""){
			_Str_MessageBeforLoad = "暂未加载数据";
		}
	}
	/**
	 * 设置没有数据时的提示信息
	 * @param message
	 */
	public void setMessageNoData(String message){
		_Str_MessageNoData = message;
		if(message == null || message == ""){
			_Str_MessageNoData = "没有任何数据";
		}
	}
	/**
	 * 当前是否已经加载数据
	 */
	private boolean _Bln_IsNowLoadData = false;
	/**
	 * 设置当前是否已经加载数据
	 * 用于控制显示列表数据为空时的提示信息
	 * @param isload
	 */
	public void setIsNowLoadData(boolean isload){
		_Bln_IsNowLoadData = isload;
	}
	
	public GroupAdapter(Context context, ArrayList<Object> items){
		this.context = context;
		data = items;
		inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		if(data == null){
			data = new ArrayList<Object>();
		}
	}
	/**
	 * 缓存视图,2016-07-28 11:56 何洪滔 添加
	 * @param obj 视图对应的数据对象
	 * @param view 要缓存的视图
	 */
	protected void cacheView(Object obj, View view){
		if(obj == null || view == null){
			return;
		}
	}
	
	//TODO 2016-02-25 何洪滔 添加设置分组间隔背景方法
	private final int GROUP_BACKGROUND_TYPE_NONE = 102;
	private final int GROUP_BACKGROUND_TYPE_COLOR = 103;
	private final int GROUP_BACKGROUND_TYPE_DRAWABLE = 104;
	private final int GROUP_BACKGROUND_TYPE_RESURCE = 105;
	/**
	 * 分组背景类型
	 */
	private int GROUP_BACKGROUND_TYPE = GROUP_BACKGROUND_TYPE_NONE;
	private int groupBackgroundColor = 0;
	private Drawable groupBackgroundDrawable = null;
	private int groupBackgroundResurceId = 0;
	public void setGroupSplitBackgroundColor(int color){
		GROUP_BACKGROUND_TYPE = GROUP_BACKGROUND_TYPE_COLOR;
		groupBackgroundColor = color;
	}
	public void setGroupSplitBackgroundDrawable(Drawable drawable){
		GROUP_BACKGROUND_TYPE = GROUP_BACKGROUND_TYPE_DRAWABLE;
		groupBackgroundDrawable = drawable;
	}
	public void setGroupSplitBackgroundResurce(int resurceId){
		GROUP_BACKGROUND_TYPE = GROUP_BACKGROUND_TYPE_RESURCE;
		groupBackgroundResurceId = resurceId;
	}
	
	/**
	 * 生成一个分组间隔对象
	 * @return
	 */
	public static Object createGroupSplit(String title){
		return new GroupListViewSplit(title);
	}
	/**
	 * 获取获取更多按钮按下事件
	 * @return
	 */
	public View.OnClickListener getMoreOnClickListener(){
		return null;
	}

	/**
	 * 获取指定位置的数据对象
	 * @param index
	 * @return
	 */
	public Object getItemAt(int index){
		if(index >=0 && index < data.size()){
			return data.get(index);
		}
		return null;
	}
	/**
	 * 更新指定位置的数据对象
	 * @param index
	 * @param obj
	 */
	public void setItemAt(int index, Object obj){
		if(index >=0 && index < data.size()){
			data.remove(index);
			data.add(index, obj);
		}
	}

	/**
	 * 当前位置是否是分组间隔
	 * @param position
	 * 		要判断的位置索引
	 * @return
	 */
	public boolean isGroupPosition(int position){
		Object obj = this.getItemAt(position);
		if(obj == null){
			return false;
		}
		if(obj.getClass().equals(GroupListViewSplit.class)){
			return true;
		}
		return false;
	}

	/**
	 * 当前是不是最后一页
	 * @return
	 */
	protected boolean isEndPage(){
		return _Int_NowPage >= _Int_TotalPage;
	}
	
	protected int _Int_NowPage = 1;
	/**
	 * 获取当前的页数
	 * @return
	 */
	public int getNowPage(){
		return _Int_NowPage;
	}
	/**
	 * 设置当前的页数
	 * @param nowPage
	 */
	public void setNowPage(int nowPage){
		_Int_NowPage = nowPage;
	}
	
	protected int _Int_TotalPage = 1;
	/**
	 * 获取当前总页数
	 * @return
	 */
	public int getTotalPage(){
		return _Int_TotalPage;
	}
	/**
	 * 设置当前总页数
	 * @param totalPage
	 */
	public void setTotalPage(int totalPage){
		_Int_TotalPage = totalPage;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		if(data.size() == 0){
			//数据列表为空时,要显示相关提示信息
			return 1;
		}
		if(_Bln_HasLoadMoreButton){
			return data.size() + 1;
		}
		return data.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		View vi = convertView;
		//如果列表数据为空,则显示提示信息
		if(data.size() == 0){
			if(vi == null || vi.findViewById(R.id.tv_comp_listview_no_data_info) == null){
				vi = inflater.inflate(R.layout.comp_listview_no_data_info, null);
			}
			TextView tvInfo = (TextView)vi.findViewById(R.id.tv_comp_listview_no_data_info);
			int height = Utils.getDisplayHeight(getContext());
			if(parent != null){
				height = parent.getMeasuredHeight();
			}
			tvInfo.setHeight(height);
			//tvInfo.setLayoutParams(new android.widget.RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams.MATCH_PARENT, android.widget.RelativeLayout.LayoutParams.MATCH_PARENT));
			if(_Bln_IsNowLoadData){//如果已经加载了数据,则显示没有数据的提示信息
				tvInfo.setText(_Str_MessageNoData);
			}else{
				tvInfo.setText(_Str_MessageBeforLoad);
			}
			return vi;
		}
		//显示最后的加载更多按钮
		if(_Bln_HasLoadMoreButton){
			if(position == data.size()){
				//最后的显示为加载更多按钮
				if(vi == null || convertView.findViewById(com.cssg.android.R.id.comp_listview_more_button) == null){
					vi = inflater.inflate(com.cssg.android.R.layout.comp_listview_more, null);
				}
				Button btn = (Button) vi.findViewById(com.cssg.android.R.id.comp_listview_more_button);
				if(_Str_MoreButton != ""){
					btn.setText(_Str_MoreButton);
				}
				btn.setOnClickListener(new View.OnClickListener() {
					
					@Override
					public void onClick(View view) {
						// TODO 加载更多按钮按下
						if(getMoreOnClickListener() != null){


							_Int_NowPage ++;
							if(isEndPage()){
								_Int_NowPage --;
								Toast.makeText(getContext(), "已经达到最后一页", Toast.LENGTH_SHORT).show();
								return;
							}
							Button btn = (Button)view;
							btn.setEnabled(false);
							btn.setText("正在加载数据…");
							getMoreOnClickListener().onClick(view);
						}
					}
				});
				if(isEndPage()){
					//btn.setEnabled(false);
				}else{
					btn.setEnabled(true);
				}
				return vi;
			}
		}
		Object obj = data.get(position);
		if(obj == null){
			return null;
		}
		if(obj.getClass().equals(GroupListViewSplit.class)){//当前节点是分组间隔
			vi = this.fillViewWithData(obj, convertView);
		}else{
			vi = null;
		}
		return vi;
	}	
	/**
	 * 填充数据到显示
	 * @param obj
	 * @param convertView
	 */
	protected View fillViewWithData(Object obj, View convertView){
		View vi = null;
		try{
			if (vi == null || convertView.findViewById(R.id.comp_listview_group_split_title) == null){
				vi = inflater.inflate(R.layout.comp_listview_group_split, null);
			}
			GroupListViewSplit s = (GroupListViewSplit)obj;
			TextView tvTitle = (TextView)vi.findViewById(R.id.comp_listview_group_split_title);
			if(s.getTitle() != null && s.getTitle() != ""){
				tvTitle.setText(s.getTitle());
				tvTitle.setVisibility(View.VISIBLE);
				//修改高度为22dp
				vi.setLayoutParams(new android.widget.AbsListView.LayoutParams(android.widget.AbsListView.LayoutParams.MATCH_PARENT, (int) (22 * Utils.getSystemDensity(getContext()))));
			}
			switch(GROUP_BACKGROUND_TYPE){
			case GROUP_BACKGROUND_TYPE_COLOR:
				tvTitle.setBackgroundColor(groupBackgroundColor);
				vi.setBackgroundColor(groupBackgroundColor);
				break;
			case GROUP_BACKGROUND_TYPE_DRAWABLE:
				tvTitle.setBackground(groupBackgroundDrawable);
				vi.setBackground(groupBackgroundDrawable);
				break;
			case GROUP_BACKGROUND_TYPE_RESURCE:
				tvTitle.setBackgroundResource(groupBackgroundResurceId);
				vi.setBackgroundResource(groupBackgroundResurceId);
				break;
			}
		}catch(Exception e){
			Log.e(TAG, "填充数据失败");
			vi = null;
		}
		return vi;
	}
	

}
第二个类:

package com.cssg.android;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import com.cssg.android.utils.DateTimePickDialogUtil;
import com.cssg.android.utils.ImageLoader;
import com.cssg.android.utils.Utils;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * 各种节点类型集合适配器
 * 包括:日期节点,图片列表节点,链接节点
 * 	2015-10-03 15:42 何洪滔 增加图片节点
 * 	2015-10-05 10:23 何洪滔 增加图片列表节点
 * 	2015-10-07 15:58 何洪滔 增加链接节点
 *  2016-02-24 22:37 何洪滔 增加链接节点的生成方法
 *  2016-06-02 15:02 何洪滔 增加链接节点的生成方法
 * @author cubar
 *
 */
public class UtilsAdapter extends GroupAdapter {
	
	protected Context _context;
	
	/**
	 * 图片加载器
	 */
	private ImageLoader imageLoader;

	public UtilsAdapter(Context context, ArrayList<Object> items) {
		super(context, items);
		// TODO Auto-generated constructor stub
		_context = context;
		imageLoader = new ImageLoader(context);
	}
	
	/**
	 * 获取当前设置的日期选择回调接口
	 * @return
	 */
	protected DateTimePickDialogUtil.OnDateTimeSelected getOnDateTimeSelectedInterface(){
		return null;
	}
	
	/**
	 * 获取日期节点数据对象
	 * @param date
	 * 		日期节点数据接口
	 * @return
	 */
	public Object createDateViewData(DateView date){
		if(date == null){
			return null;
		}
		return new DateViewClass(date);
	}
	/**
	 * 创建图片节点数据对象
	 * @param imageview
	 * 		图片节点数据接口
	 * @return
	 */
	public Object createImageViewData(ImageView imageview){
		if(imageview == null){
			return null;
		}
		return new ImageViewClass(imageview);
	}
	/**
	 * 创建链接节点数据对象
	 * @param linkView
	 * 		链接节点数据接口
	 * @return
	 */
	public Object createLinkViewData(LinkView linkView){
		if(linkView == null){
			return null;
		}
		return new LinkViewClass(linkView);
	}
	
	/**
	 * 创建链接节点数据对象
	 * @param title	显示的标题
	 * @param summary 显示的说明文字
	 * @param args 参数
	 * @param listener 点击事件
	 * @return
	 */
	public Object createLinkViewData(String title, String summary, String args, View.OnClickListener listener){
		return new LinkViewClass(title, summary, args, listener);
	}
	
	/**
	 * 创建链接节点数据对象
	 * @param title	显示的标题
	 * @param summary 显示的说明文字
	 * @param args 参数
	 * @param activity 调用的activity
	 * @param pkg 要启动的activity所在的包
	 * @param activityFullName 要启动的activity的名称,包含包名称
	 * @param requestCode 需要回调的参数,0则不需要回调
	 * @return
	 */
	public Object createLinkViewData(String title, String summary, String args, final Activity activity,final String pkg, final String activityFullName, final int requestCode){
		View.OnClickListener listener = new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
		   		Intent intent = new Intent();
		   		intent.setComponent(new ComponentName(pkg, activityFullName));
		   		intent.setAction(Intent.ACTION_VIEW);
		   		if(requestCode < 0){
		   			activity.startActivity(intent);
		   		}else{
		   			activity.startActivityForResult(intent, requestCode);
		   		}
			}
		};
		return new LinkViewClass(title, summary, args, listener);
	}
	/**
	 * 创建链接节点数据对象
	 * @param title	显示的标题
	 * @param summary 显示的说明文字
	 * @param args 参数
	 * @param context 调用的context
	 * @param pkg 要启动的activity所在的包
	 * @param activityFullName 要启动的activity的名称,包含包名称
	 * @return
	 */
	public Object createLinkViewData(String title, String summary, String args, final Context context,final String pkg, final String activityFullName){
		View.OnClickListener listener = new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
		   		Intent intent = new Intent();
		   		intent.setComponent(new ComponentName(pkg, activityFullName));
		   		intent.setAction(Intent.ACTION_VIEW);
		   		context.startActivity(intent);
			}
		};
		return new LinkViewClass(title, summary, args, listener);
	}
	/**
	 * 创建链接节点数据对象
	 * @param title	显示的标题
	 * @param summary 显示的说明文字
	 * @param args 参数
	 * @param context 调用的context
	 * @param cls 要链接的启动Activity
	 * @return
	 */
	public Object createLinkViewData(String title, String summary, String args, final Context context, final Class<?> cls){
		return createLinkViewData(title, summary, args, context, cls.getPackage().getName(), cls.getName());
	}
	/**
	 * 创建链接节点数据对象
	 * @param title	显示的标题
	 * @param summary 显示的说明文字
	 * @param args 参数
	 * @param activity 调用的activity
	 * @param cls 要链接的启动Activity
	 * @param requestCode 需要回调的参数,0则不需要回调
	 * @return
	 */
	public Object createLinkViewData(String title, String summary, String args,  Activity activity, Class<?> cls, int requestCode){
		return createLinkViewData(title, summary, args, activity, cls.getPackage().getName(), cls.getName(), requestCode);
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		View vi = convertView;
		vi = super.getView(position, convertView, parent);
		if(vi == null){
			Object obj = getItemAt(position);
			if(obj == null){
				return null;
			}
			if(obj.getClass().equals(DateViewClass.class)){//当前节点是时间数据节点
				final DateViewClass d = (DateViewClass)obj;
				vi = inflater.inflate(R.layout.comp_listview_item_data_view, null);
				setDateView(vi, d.getSelectedDate());
				//点击选择日期事件
				vi.setOnClickListener(new View.OnClickListener() {
					
					@Override
					public void onClick(final View view) {
						// TODO Auto-generated method stub
						Date dtm = d.getSelectedDate();
						if(dtm == null){
							dtm = new Date();
						}
						DateTimePickDialogUtil util = new DateTimePickDialogUtil(getContext(), inflater, dtm);
						util.dateTimePicKDialog(new DateTimePickDialogUtil.OnDateTimeSelected() {
							
							@Override
							public void OnSelected(final Date date) {
								// TODO Auto-generated method stub
								if(getOnDateTimeSelectedInterface() != null){
									getOnDateTimeSelectedInterface().OnSelected(date);
								}
								setDateView(view, date);
								setItemAt(position, new DateViewClass(new DateView(){

									@Override
									public Date getSelectedDate() {
										// TODO Auto-generated method stub
										return date;
									}}));
							}
						});
					}
				});
			}else if(obj.getClass().equals(ImageViewClass.class)){
				//当前节点是图片节点
				int w, h;//图片显示的宽度
				//计算图片大小
				int sw = Utils.getDisplayWidth(getContext());
				ImageViewClass ivc = (ImageViewClass)obj;
				w = (int) ((sw - (2 + ivc.getImageCount() - 1) * 10 * Utils.getSystemDensity(getContext())) / ivc.getImageCount());
				h = w;
				vi = inflater.inflate(R.layout.comp_listview_item_images_view, null);
				LinearLayout ll = (LinearLayout)vi.findViewById(R.id.ll_comp_listview_item_images_view);
				for(int i = 0 ; i < ivc.getImageUrl().length; i ++){
					if(i > 0){//增加图片间隔
						android.view.View sv = new android.view.View(getContext());
						sv.setLayoutParams(new LayoutParams((int) (10 * Utils.getSystemDensity(getContext())),LayoutParams.MATCH_PARENT));
						ll.addView(sv);
					}
					android.widget.ImageView iv = new android.widget.ImageView(getContext());
					iv.setLayoutParams(new LayoutParams(w, h));
					ll.addView(iv);
					imageLoader.DisplayImage(ivc.getImageUrl()[i], iv);
				}
			}else if(obj.getClass().equals(LinkViewClass.class)){
				//当前节点是链接节点
				vi = inflater.inflate(R.layout.comp_listview_item_link_view, null);
				LinkViewClass lvc = (LinkViewClass)obj;
				TextView tvTitle = (TextView)vi.findViewById(R.id.tv_comp_listview_item_link_view_title);
				TextView tvSummary = (TextView)vi.findViewById(R.id.tv_comp_listview_item_link_view_summary);
				tvTitle.setText(lvc.getText());
				tvSummary.setText(lvc.getTextSummary());
				if(lvc.getOnClickListener() != null){
					vi.setTag(lvc.getArgs());
					vi.setOnClickListener(lvc.getOnClickListener());
				}
			}else {
				vi = null;
			}
			cacheView(obj, vi);
		}
		return vi;
	}	
	
	private void setDateView(View view, Date date){

		if(date == null){
			date = new Date();
		}
		Calendar c = Calendar.getInstance(); 
        c.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));  
        c.setTime(date);
        //mYear = String.valueOf(c.get(Calendar.YEAR)); // 获取当前年份  
        //mMonth = String.valueOf(c.get(Calendar.MONTH) + 1);// 获取当前月份  
        //mDay = String.valueOf(c.get(Calendar.DAY_OF_MONTH));// 获取当前月份的日期号码  
        //return mYear + "年" + mMonth + "月" + mDay+"日"+"/星期"+mWay;
        
		TextView tvY = (TextView)view.findViewById(R.id.tv_comp_listview_item_date_view_year);
		tvY.setText(String.valueOf(c.get(Calendar.YEAR)));
		TextView tvM = (TextView)view.findViewById(R.id.tv_comp_listview_item_date_view_month);
		tvM.setText(String.valueOf(c.get(Calendar.MONTH) + 1));
		TextView tvD = (TextView)view.findViewById(R.id.tv_comp_listview_item_date_view_day);
		tvD.setText(String.valueOf(c.get(Calendar.DAY_OF_MONTH)));
		TextView tvH = (TextView)view.findViewById(R.id.tv_comp_listview_item_date_view_hour);
		tvH.setText(String.valueOf(c.get(Calendar.HOUR_OF_DAY)));
		TextView tvMi = (TextView)view.findViewById(R.id.tv_comp_listview_item_date_view_minite);
		tvMi.setText(String.valueOf(c.get(Calendar.MINUTE)));
		//获取星期
        String mWay = String.valueOf(c.get(Calendar.DAY_OF_WEEK));  
        if("1".equals(mWay)){  
            mWay ="天";  
        }else if("2".equals(mWay)){  
            mWay ="一";  
        }else if("3".equals(mWay)){  
            mWay ="二";  
        }else if("4".equals(mWay)){  
            mWay ="三";  
        }else if("5".equals(mWay)){  
            mWay ="四";  
        }else if("6".equals(mWay)){  
            mWay ="五";  
        }else if("7".equals(mWay)){  
            mWay ="六";  
        }  
		TextView tvWD = (TextView)view.findViewById(R.id.tv_comp_listview_item_date_view_weekday);
		tvWD.setText("星期" + mWay);
	}
	
	//TODO 相关列表节点接口定义
	
	//TODO 日期节点段接口定义
	/**
	 * 日期节点数据接口
	 * @author cubar
	 *
	 */
	public interface DateView{
		/**
		 * 获取当前选择的时间
		 * @return
		 */
		Date getSelectedDate();
	}
	/**
	 * 日期节点内部类
	 * @author cubar
	 *
	 */
	protected class DateViewClass{
		
		private DateView i;
		/**
		 * 获取当前选择的时间
		 * @return
		 */
		Date getSelectedDate(){
			return i.getSelectedDate();
		}
		
		public DateViewClass(DateView dv){
			i = dv;
		}
	}
	
	//TODO 图片节点接口定义
	/**
	 * 图片节点数据接口
	 * 仅显示横向列表
	 * @author cubar
	 *
	 */
	public interface ImageView{
		
		/**
		 * 图片地址列表分隔符
		 */
		public final static String IMAGE_SPLIT = ";";
		
		/**
		 * 获取当前图片的地址列表
		 * @return
		 */
		String[] getImageUrls();
		/**
		 * 获取当前要显示的图片数量
		 * @return
		 */
		int getImageCount();
	}
	/**
	 * 图片节点数据内部类
	 * @author cubar
	 *
	 */
	protected class ImageViewClass{
		private ImageView v;
		/**
		 * 获取当前图片的地址
		 * @return
		 */
		public String[] getImageUrl(){
			if(v == null){
				return null;
			}
			return v.getImageUrls();
		}
		/**
		 * 获取当前要显示的图片数量
		 * @return
		 */
		int getImageCount(){
			if(v == null){
				return 0;
			}
			return v.getImageCount();
		}
		
		public ImageViewClass(ImageView iv){
			v = iv;
		}
	}
	
	//TODO 链接节点数据接口
	
	/**
	 * 链接节点数据接口
	 * @author cubar
	 *
	 */
	public interface LinkView{
		
		/**
		 * 获取链接主文字
		 * @return
		 */
		String getText();
		/**
		 * 获取说明文字
		 * @return
		 */
		String getTextSummary();
		/**
		 * 获取参数
		 * @return
		 */
		String getArgs();
		/**
		 * 获取点击事件
		 * @return
		 */
		View.OnClickListener getOnClickListener();
	}
	/**
	 * 链接节点数据内部类
	 * @author cubar
	 *
	 */
	protected class LinkViewClass{
		
		private LinkView lv;
		private String text;
		private String summary;
		private String args;
		private View.OnClickListener listener;
		
		/**
		 * 获取链接主文字
		 * @return
		 */
		String getText(){
			if(lv != null){
				return lv.getText();
			}
			return text;
		}
		/**
		 * 获取说明文字
		 * @return
		 */
		String getTextSummary(){
			if(lv != null){
				return lv.getTextSummary();
			}
			return summary;
		}
		/**
		 * 获取参数
		 * @return
		 */
		String getArgs(){
			if(lv != null){
				return lv.getArgs();
			}
			return args;
		}
		/**
		 * 获取点击事件
		 * @return
		 */
		View.OnClickListener getOnClickListener(){
			if(lv != null){
				return lv.getOnClickListener();
			}
			return listener;
		}
		
		public LinkViewClass(LinkView linkView){
			lv = linkView;
		}
		
		public LinkViewClass(String txt, String smy, String arg, View.OnClickListener lstner){
			text = txt;
			summary = smy;
			args = arg;
			listener = lstner;
			lv = null;
		}
	}
}
第三个类
package com.cssg.android;

import java.util.ArrayList;
import java.util.Date;

import com.cssg.android.photo.ImageSelectViewActivity;
import com.cssg.android.utils.DatePickDialogUtil;
import com.cssg.android.utils.Utils;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.Toast;
import android.widget.TextView;

/**
 * 支持列表项目内容编辑的集合适配器 
 * 2016-07-28 11:42 何洪滔 增加新版本的日期节点功能和相关方法 
 * 2016-07-29 20:23 何洪滔 增加图片选择节点功能和相关方法,此方法需要使用EditAdapter(Activity activity, ArrayList<Object> items)进行初始化
 * 2016-08-30 19:23 何洪滔 增加跳转Activity选择节点方法
 * 
 * @author cubar
 * 
 */
@SuppressWarnings("deprecation")
public class EditAdapter extends UtilsAdapter {
	
	private Activity _activity;
	/**
	 * 是否能编辑标识
	 */
	private boolean _Bln_Editable = true;
	/**
	 * 获取是否能编辑
	 * @return
	 */
	protected boolean getEditable(){
		return _Bln_Editable;
	}
	/**
	 * 设置是否能编辑
	 * @param enable
	 */
	public void setEditable(boolean enable){
		_Bln_Editable = enable;
	}

	public EditAdapter(Context context, ArrayList<Object> items) {
		super(context, items);
		// TODO Auto-generated constructor stub
	}
	
	public EditAdapter(Activity activity, ArrayList<Object> items){
		super(activity, items);
		_activity = activity;
	}

	/**
	 * 创建可编辑链接项
	 * 
	 * @param title
	 *            标题
	 * @param content
	 *            内容
	 * @param mask
	 *            提示水印
	 * @return
	 */
	public Object createEditLinkView(String title, String content, String mask) {
		return createEditLinkView(title, content, mask, false);
	}

	/**
	 * 创建可编辑链接项
	 * 
	 * @param title
	 *            标题
	 * @param content
	 *            内容
	 * @param mask
	 *            提示水印
	 * @param newedit
	 *            是否在新窗口中编辑
	 * @return
	 */
	public Object createEditLinkView(String title, String content, String mask,
			boolean newedit) {
		return new EditLinkView(title, content, mask, newedit);
	}

	/**
	 * 创建可编辑链接项
	 * 
	 * @param title
	 *            标题
	 * @param content
	 *            内容
	 * @param mask
	 *            提示水印
	 * @param newedit
	 *            是否在新窗口中编辑
	 * @param editable
	 *            是否可编辑
	 * @return
	 */
	public Object createEditLinkView(String title, String content, String mask,
			boolean newedit, boolean editable) {
		EditLinkView res = new EditLinkView(title, content, mask, newedit);
		res.setClickable(editable);
		return res;
	}

	/**
	 * 创建可编辑链接项
	 * 
	 * @param title
	 *            标题
	 * @param content
	 *            内容
	 * @param mask
	 *            提示水印
	 * @param newedit
	 *            是否在新窗口中编辑
	 * @param editable
	 *            是否可编辑
	 * @param set
	 *            赋值接口
	 * @return
	 */
	public Object createEditLinkView(String title, String content, String mask,
			boolean newedit, boolean editable, OnSetDone set) {
		EditLinkView res = new EditLinkView(title, content, mask, newedit, set);
		res.setClickable(editable);
		return res;
	}

	/**
	 * 创建按钮项
	 * 
	 * @param text
	 *            按钮名称
	 * @param listener
	 *            点击事件
	 * @return
	 */
	public Object createButtonView(String text, View.OnClickListener listener) {
		return new ButtonView(text, listener);
	}

	/**
	 * 创建列表选择顶
	 * 
	 * @param title
	 *            标题
	 * @param items
	 *            选择内容
	 * @param completed
	 *            选择完成回调接口
	 * @return
	 */
	public Object createSelectView(View root, String title, ArrayList<? extends ISelectItem> items,
			OnSelectCompleted completed) {
		return createSelectView(root, title, items, "", completed);
	}

	/**
	 * 创建列表选择顶
	 * 
	 * @param title
	 *            标题
	 * @param items
	 *            选择内容
	 * @param selectId
	 *            默认选择的值
	 * @param completed
	 *            选择完成回调接口
	 * @return
	 */
	public Object createSelectView(View root, String title, ArrayList<? extends ISelectItem> items,
			String selectId, OnSelectCompleted completed) {
		SelectView view = new SelectView(title, items, selectId, completed);
		view.setRootView(root);
		return view;
	}
	/**
	 * 创建列表选择顶
	 * @param activity 上下文视图
	 * @param pkg 要启动的视图所属包名
	 * @param compname 组件名
	 * @param resultCode 返回标识
	 * @param title 标题
	 * @param vlaue 要显示的内容
	 * @param mask 提示信息
	 * @param argName 跳转参数名称
	 * @param args 参数
	 * @return
	 */
	public Object createSelectView(Activity activity, String pkg, String compname, int resultCode, String title, String value, String mask, String argName, String args){
		SelectView view = new SelectView(title, null, "", null);
		view.setActivity(activity);
		view.setPakageName(pkg);
		view.setComponentName(compname);
		view.setResultCode(resultCode);
		view.setArgName(argName);
		view.setArgs(args);
		view.setMask(mask);
		view.setValue(value);
		return view;
	}

	/**
	 * 获取日期节点数据对象
	 * 
	 * @param title
	 *            标题
	 * @param date
	 *            日期值
	 * @param completed
	 *            选择完成回调接口
	 * @return
	 */
	public Object createDateViewData(String title, Date date,
			OnDateSelectCompleted completed) {
		return new DateViewV2(title, date, completed);
	}

	/**
	 * 获取图片选择节点数据对象,使用此方法,需要Activity实现On
	 * 
	 * @param title
	 *            标题
	 * @param images
	 *            已经选择的图片列表,使用“;”间隔
	 * @param completed
	 *            选择完成回调接口
	 * @return
	 */
	public Object createImageSelectView(String title, String images, ImageGalleryAdapter adapter,
			OnImageSelectCompleted completed) {
		return new ImageSelectView(title, images, adapter, completed);
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		View view = super.getView(position, convertView, parent);
		if (view != null) {
			return view;
		}
		Object obj = this.getItemAt(position);
		if (obj != null) {
			if (obj.getClass().equals(EditLinkView.class)) {
				final EditLinkView cls = (EditLinkView) obj;

				TextWatcher watcher = new TextWatcher() {

					@Override
					public void onTextChanged(CharSequence s, int start,
							int before, int count) {
						// TODO Auto-generated method stub
						// Log.i("EditAdapter", "编辑改变:" + s);
					}

					@Override
					public void beforeTextChanged(CharSequence s, int start,
							int count, int after) {
						// TODO Auto-generated method stub
						// Log.i("EditAdapter", "编辑改变开始:" + s);
					}

					@Override
					public void afterTextChanged(Editable s) {
						// TODO Auto-generated method stub
						// Log.i("EditAdapter", "编辑改变结束:" + s.toString());
						if (cls.getOnSetDone() != null) {
							cls.getOnSetDone().Set(s.toString());
						}
						cls.setContent(s.toString());
					}
				};

				view = this.inflater.inflate(R.layout.comp_listview_editlink,
						null);
				TextView tvTitle = (TextView) view.findViewById(R.id.tv_title);
				tvTitle.setText(cls.getTitle());
				TextView tvContent = (TextView) view
						.findViewById(R.id.tv_content);
				if(cls.getContent() != "" && cls.getContent() != null){
					tvContent.setText(cls.getContent());
				}else{
					tvContent.setText(cls.getMask());
				}
				EditText etContent = (EditText) view
						.findViewById(R.id.et_content);
				etContent.setText(cls.getContent());
				etContent.setHint(cls.getMask());
				etContent.addTextChangedListener(watcher);
				android.widget.ImageView iv = (android.widget.ImageView) view
						.findViewById(R.id.iv_linksign);
				if(!getEditable()){
					etContent.setVisibility(View.INVISIBLE);
					tvContent.setVisibility(View.VISIBLE);
					iv.setVisibility(View.INVISIBLE);
				}else{
					if (!cls.getClickable()) {
						// 不支持点击事件,只显示TextView
						etContent.setVisibility(View.INVISIBLE);
						tvContent.setVisibility(View.VISIBLE);
						iv.setVisibility(View.INVISIBLE);
					} else {
						if (cls.getIsNewEditAct()) {
							iv.setVisibility(View.VISIBLE);
							// 需要跳转到编辑界面
							etContent.setVisibility(View.INVISIBLE);
							tvContent.setVisibility(View.VISIBLE);
							// 添加跳转事件
						} else {
							iv.setVisibility(View.INVISIBLE);
							// 直接在本界面编辑
							etContent.setVisibility(View.VISIBLE);
							tvContent.setVisibility(View.INVISIBLE);
						}
					}
				}
			} else if (obj.getClass().equals(ButtonView.class)) {
				// 按钮项
				ButtonView bv = (ButtonView) obj;
				view = inflater.inflate(R.layout.comp_listview_button, null);
				Button btn = (Button) view.findViewById(R.id.btn_Button);
				btn.setText(bv.getButtonText());
				btn.setOnClickListener(bv.getListener());
				if(!getEditable()){
					btn.setEnabled(getEditable());
				}
			} else if (obj.getClass().equals(SelectView.class)) {
				// 选择项
				final SelectView sv = (SelectView) obj;

				view = this.inflater.inflate(R.layout.comp_listview_select,
						null);
				TextView tvTitle = (TextView) view.findViewById(R.id.tv_title);
				tvTitle.setText(sv.getTitle());
				final TextView tvContent = (TextView) view
						.findViewById(R.id.tv_content);
				tvContent.setText(sv.getContent());
				// android.widget.ImageView iv =
				// (android.widget.ImageView)view.findViewById(R.id.iv_linksign);
				if(getEditable()){
					// 添加点击事件
					tvContent.setOnClickListener(new View.OnClickListener() {
	
						@Override
						public void onClick(View arg0) {
							// TODO Auto-generated method stub
							if(sv.getComponentName() == "" ||  sv.getComponentName() == null){
								// 实例化SelectPicPopupWindow
								SelectItemPopupWindow menuWindow = new SelectItemPopupWindow(
										getContext(), sv.getSelects(),
										new OnSelectCompleted() {
	
											@Override
											public void OnSelect(ISelectItem si) {
												// TODO Auto-generated method stub
												tvContent.setText(si.getName());
												if (sv.getSelectCompleted() != null) {
													sv.getSelectCompleted().OnSelect(si);
												}
											}
		
										});
								// 显示窗口
								// menuWindow.showAtLocation(getContext().findViewById(R.id.ll_content),
								// Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
								// 设置layout在PopupWindow中显示的位置
								menuWindow.showAtLocation(sv.getRootView(),
										Gravity.CENTER | Gravity.BOTTOM, 0, 0);
							}else{
								if(sv.getActivity() != null){
									//跳转至指定的Activity
									Intent intent = new Intent();
									intent.setAction(Intent.ACTION_VIEW);
									intent.setComponent(new ComponentName(sv.getPakageName(), sv.getComponentName()));
									Bundle bund = new Bundle();
									bund.putString(sv.getArgName(), sv.getArgs());
									intent.putExtras(bund);
									sv.getActivity().startActivityForResult(intent, sv.getResultCode());
								}
							}
						}
					});
				}
			} else if (obj.getClass().equals(DateViewV2.class)) {// 当前接口是日期节点
				final DateViewV2 d = (DateViewV2) obj;
				view = inflater.inflate(R.layout.comp_listview_date, null);
				// setDateView(view, d.getDate());

				TextView tvTitle = (TextView) view.findViewById(R.id.tv_title);
				tvTitle.setText(d.getTitle());

				/*
				 * Calendar c = Calendar.getInstance();
				 * c.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
				 * c.setTime(d.getDate()); //mYear =
				 * String.valueOf(c.get(Calendar.YEAR)); // 获取当前年份 //mMonth =
				 * String.valueOf(c.get(Calendar.MONTH) + 1);// 获取当前月份 //mDay =
				 * String.valueOf(c.get(Calendar.DAY_OF_MONTH));// 获取当前月份的日期号码
				 * //return mYear + "年" + mMonth + "月" + mDay+"日"+"/星期"+mWay;
				 * String str = String.valueOf(c.get(Calendar.YEAR)) + "年" +
				 * String.valueOf(c.get(Calendar.MONTH) + 1) + "月" +
				 * String.valueOf(c.get(Calendar.DAY_OF_MONTH)) + "日";
				 */

				final TextView tvContent = (TextView) view
						.findViewById(R.id.tv_content);
				tvContent.setText(Utils.stringFromDate("yyyy年MM月dd日",
						d.getDate()));
				if(getEditable()){
					// 点击选择日期事件
					view.setOnClickListener(new View.OnClickListener() {
	
						@Override
						public void onClick(final View view) {
							// TODO Auto-generated method stub
							Date dtm = d.getDate();
							if (dtm == null) {
								dtm = new Date();
							}
							DatePickDialogUtil util = new DatePickDialogUtil(
									getContext(), inflater, dtm);
							util.dateTimePicKDialog(new DatePickDialogUtil.OnDateTimeSelected() {
	
								@Override
								public void OnSelected(final Date date) {
									// TODO Auto-generated method stub
									if (d.getSelectCompleted() != null) {
										d.getSelectCompleted().OnDateSelect(date);
									}
									// setDateView(view, date);
									tvContent.setText(Utils.stringFromDate(
											"yyyy年MM月dd日", date));
									d.setDate(date);
								}
							});
						}
					});
				}
			} else if (obj.getClass().equals(ImageSelectView.class)) {
				// 为图片选择项
				final ImageSelectView cls = (ImageSelectView) obj;
				view = inflater.inflate(R.layout.comp_listview_imageselect,
						null);
				TextView tvTitle = (TextView) view.findViewById(R.id.tv_title);
				tvTitle.setText(cls.getTitle());
				TextView tvContent = (TextView) view
						.findViewById(R.id.tv_content);
				tvContent.setText("点击选择图片");
				Gallery gl = (Gallery) view.findViewById(R.id.gly_images);
				gl.setAdapter(cls.getAdapter());
				if (cls.getImages() == null || cls.getImages().length() < 1) {
					tvContent.setVisibility(View.VISIBLE);
					gl.setVisibility(View.INVISIBLE);
				} else {
					tvContent.setVisibility(View.INVISIBLE);
					gl.setVisibility(View.VISIBLE);
				}
				_listImageSelectHoler.add(new ImageSelectHolder(tvContent, gl, cls));
				if(getEditable()){
					// 项目的点击事件
					view.setOnClickListener(new View.OnClickListener() {
	
						@Override
						public void onClick(View arg0) {
							// TODO Auto-generated method stub
							if(_activity != null){
								Intent intent = new Intent();
								//intent.setComponent(new ComponentName("com.cssg.android", ImageSelectViewActivity.class.getName()));
								intent.setClass(_context, ImageSelectViewActivity.class);
								Bundle bund = new Bundle();
								bund.putString(ImageSelectViewActivity.STR_ARG_IMAGES, cls.getImages());
								intent.putExtras(bund);
								_activity.startActivityForResult(intent, ImageSelectViewActivity.RESULT_BACK_SIGN);
							}else{
								Toast.makeText(_context, "没有使用Activity进行初始化控件!", Toast.LENGTH_SHORT).show();
							}
						}
					});
				}
			}
		}
		cacheView(obj, view);
		return view;
	}
	
	private ArrayList<ImageSelectHolder> _listImageSelectHoler = new ArrayList<ImageSelectHolder>();
	
	/**
	 * 图片选择显示控件容器
	 * @author cubar
	 *
	 */
	protected class ImageSelectHolder{
		private TextView _sum;
		private Gallery _gal;
		private ImageSelectView _isv;
		
		protected TextView getTextView(){
			return _sum;
		}
		
		protected Gallery getGallery(){
			return _gal;
		}
		
		protected ImageSelectView getView(){
			return _isv;
		}
		
		public ImageSelectHolder(TextView tv, Gallery gal, ImageSelectView view){
			_sum = tv;
			_gal = gal;
			_isv = view;
		}
	}
	
	/**
	 * 通知图片已经选择
	 */
	public void notifImageSelected(String images){
		for(int i = 0 ; i < _listImageSelectHoler.size(); i ++){
			if(images.length() > 0){
				_listImageSelectHoler.get(i).getTextView().setVisibility(View.INVISIBLE);
				_listImageSelectHoler.get(i).getGallery().setVisibility(View.VISIBLE);
			}else{
				_listImageSelectHoler.get(i).getTextView().setVisibility(View.VISIBLE);
				_listImageSelectHoler.get(i).getGallery().setVisibility(View.INVISIBLE);
			}
			try{
				_listImageSelectHoler.get(i).getView().setImages(images);
			}catch(Exception e){
				Log.e("EditAdapter", "异常:" + e.getMessage());
			}
		}
	}

	/**
	 * 可编辑的链接项目 内部类 可设置直接编辑还是链接到一个文本编辑页编辑
	 * 
	 * @author cubar
	 * 
	 */
	protected class EditLinkView {

		private String _title;
		private String _content;
		private String _mask;
		private boolean _Bln_newEditAct = false;
		// private View.OnClickListener _listener = null;
		private boolean _Bln_Clickable = true;
		private OnSetDone _onSetDone;

		public EditLinkView() {

		}

		public EditLinkView(String title, String content, String mask,
				boolean newedit) {
			_title = title;
			_content = content;
			_mask = mask;
			_Bln_newEditAct = newedit;
		}

		public EditLinkView(String title, String content, String mask,
				boolean newedit, OnSetDone set) {
			this(title, content, mask, newedit);
			/*
			 * _title = title; _content = content; _mask = mask; _Bln_newEditAct
			 * = newedit;
			 */
			_onSetDone = set;
		}

		/**
		 * 获取链接显示标题
		 * 
		 * @return
		 */
		protected String getTitle() {
			return _title;
		}

		/**
		 * 设置链接显示标题
		 * 
		 * @param title
		 */
		protected void setTitle(String title) {
			_title = title;
		}

		/**
		 * 获取链接显示内容
		 * 
		 * @return
		 */
		protected String getContent() {
			return _content;
		}

		/**
		 * 设置链接显示内容
		 * 
		 * @param content
		 */
		protected void setContent(String content) {
			_content = content;
		}

		/**
		 * 获取水印提示信息
		 * 
		 * @return
		 */
		protected String getMask() {
			return _mask;
		}

		/**
		 * 设置水印提示信息
		 * 
		 * @param mask
		 */
		protected void setMask(String mask) {
			_mask = mask;
		}

		/**
		 * 获取是否在新编辑界面编辑
		 * 
		 * @return
		 */
		protected boolean getIsNewEditAct() {
			return _Bln_newEditAct;
		}

		/**
		 * 设置是否在新编辑界面编辑
		 * 
		 * @param isneweditact
		 */
		protected void setIsNewEditAct(boolean isneweditact) {
			_Bln_newEditAct = isneweditact;
		}

		/**
		 * 获取点击事件
		 * 
		 * @return
		 */
		/*
		 * protected View.OnClickListener getListener(){ return _listener; }
		 */
		/**
		 * 设置点击事件
		 * 
		 * @param listener
		 */
		/*
		 * protected void setClickListener(View.OnClickListener listener){
		 * _listener = listener; }
		 */
		/**
		 * 获取是否可点击
		 * 
		 * @return
		 */
		protected boolean getClickable() {
			return _Bln_Clickable;
		}

		/**
		 * 设置是否可点击
		 * 
		 * @param enable
		 */
		protected void setClickable(boolean enable) {
			_Bln_Clickable = enable;
		}

		/**
		 * 获取赋值接口
		 * 
		 * @return
		 */
		protected OnSetDone getOnSetDone() {
			return _onSetDone;
		}

		/**
		 * 设置赋值接口
		 * 
		 * @param set
		 */
		protected void setOnSetDone(OnSetDone set) {
			_onSetDone = set;
		}

	}

	/**
	 * 设置完成赋值接口
	 * 
	 * @author cubar
	 * 
	 */
	public interface OnSetDone {

		/**
		 * 设置值
		 * 
		 * @param value
		 *            值,字符串
		 */
		void Set(String value);
	}

	/**
	 * 按钮列表项
	 * 
	 * @author cubar
	 * 
	 */
	public class ButtonView {

		private String _Str_text;
		private View.OnClickListener _listener;

		/**
		 * 获取按钮字符
		 * 
		 * @return
		 */
		protected String getButtonText() {
			return _Str_text;
		}

		/**
		 * 设置按钮字符
		 * 
		 * @param text
		 */
		protected void setButtonText(String text) {
			_Str_text = text;
		}

		/**
		 * 获取按钮事件
		 * 
		 * @return
		 */
		protected View.OnClickListener getListener() {
			return _listener;
		}

		/**
		 * 设置按钮事件
		 * 
		 * @param listener
		 */
		protected void setListener(View.OnClickListener listener) {
			_listener = listener;
		}

		public ButtonView() {

		}

		public ButtonView(String text, View.OnClickListener listener) {
			_Str_text = text;
			_listener = listener;
		}
	}

	//TODO 选择列表项
	
	/**
	 * 选择列表项
	 * 2016-08-30 19:23 何洪滔 增加跳转Activity选择列表的方法
	 * 
	 * @author cubar
	 * 
	 */
	public class SelectView {

		private View _rootView;
		private String _title;
		private ArrayList<? extends ISelectItem> _lst_select;
		private String _selectId = "";
		
		private String pkgname = "";
		private String componentname = "";
		
		private Activity _activity = null;
		
		private int _resultCode = -1;
		
		private String _mask = "";
		
		private String _value = "";
		
		private String _argName = "";
		private String _args = "";
		/**
		 * 获取包名
		 * @return
		 */
		protected String getPakageName(){
			return pkgname;
		}
		/**
		 * 设置包名
		 * @param name
		 */
		protected void setPakageName(String name){
			pkgname = name;
		}
		/**
		 * 获取组件名称
		 * @return
		 */
		protected String getComponentName(){
			return componentname;
		}
		/**
		 * 设置组件名称
		 * @param name
		 */
		protected void setComponentName(String name){
			componentname = name;
		}
		/**
		 * 获取当前的Activity
		 * @return
		 */
		protected Activity getActivity(){
			return _activity;
		}
		/**
		 * 设置当前的Activity
		 * @param activity
		 */
		protected void setActivity(Activity activity){
			_activity = activity;
		}
		/**
		 * 获取返回标识
		 * @return
		 */
		protected int getResultCode(){
			return _resultCode;
		}
		/**
		 * 设置返回标识
		 * @param code
		 */
		protected void setResultCode(int code){
			_resultCode = code;
		}
		/**
		 * 获取Mask字符串
		 * @return
		 */
		protected String getMask(){
			return _mask;
		}
		/**
		 * 设置Mask字符串
		 * @param mask
		 */
		protected void setMask(String mask){
			_mask = mask;
		}
		/**
		 * 获取显示的内容
		 * @return
		 */
		protected String getValue(){
			return _value;
		}
		/**
		 * 设置显示的内容
		 * @param value
		 */
		protected void setValue(String value){
			_value = value;
		}
		/**
		 * 获取跳转Activity接受的参数名称
		 * @return
		 */
		protected String getArgName(){
			return _argName;
		}
		/**
		 * 设置跳转Activity接受的参数名称
		 * @param name
		 */
		protected void setArgName(String name){
			_argName = name;
		}
		/**
		 * 获取发送至跳转Activity的参数
		 * @return
		 */
		protected String getArgs(){
			return _args;
		}
		/**
		 * 设置发送至跳转Activity的参数
		 * @param args
		 */
		protected void setArgs(String args){
			_args = args;
		}

		/**
		 * 获取根视图供弹出窗口定位
		 * 
		 * @return
		 */
		protected View getRootView() {
			return _rootView;
		}

		/**
		 * 设置根视图供弹出窗口定位
		 * 
		 * @param root
		 */
		public void setRootView(View root) {
			_rootView = root;
		}

		/**
		 * 获取标题
		 * 
		 * @return
		 */
		protected String getTitle() {
			return _title;
		}

		/**
		 * 设置标题
		 * 
		 * @param title
		 */
		public void setTitle(String title) {
			_title = title;
		}

		/**
		 * 获取显示在选择器中的内容
		 * 
		 * @return
		 */
		protected String getContent() {
			if (_lst_select != null && _lst_select.size() > 0) {
				try {
					ISelectViewItem svi;
					for (int i = 0; i < _lst_select.size(); i++) {
						svi = (ISelectViewItem) _lst_select.get(i);
						if (svi.getID().equals(_selectId) || svi.getName().equals(_selectId)) {
							return svi.getName();
						}
					}
					svi = (ISelectViewItem) _lst_select.get(0);
					//设置成默认
					if(getSelectCompleted() != null){
						getSelectCompleted().OnSelect(svi);
					}
					_selectId = svi.getID();
					return svi.getName();
				} catch (Exception e) {
					Log.e("EditAdapter", "选择项接口化异常:" + e.getMessage());
				}
			}else if(_value != "" && _value != null){
				return _value;
			}else if(_mask != ""){
				return _mask;
			}
			return "请选择";
		}

		/**
		 * 设置选择项内容列表
		 * 
		 * @param items
		 */
		public void setSelects(ArrayList<? extends ISelectItem> items) {
			_lst_select = items;
		}

		/**
		 * 获取选择内容列表
		 * 
		 * @return
		 */
		protected ArrayList<? extends ISelectItem> getSelects() {
			return _lst_select;
		}

		protected String getSelectedID() {
			return _selectId;
		}

		/**
		 * 设置当前已经选择的项
		 * 
		 * @param id
		 */
		public void setSelectedID(String id) {
			_selectId = id;
		}

		private OnSelectCompleted _completed;

		/**
		 * 获取选择完成回调接口
		 * 
		 * @return
		 */
		protected OnSelectCompleted getSelectCompleted() {
			return _completed;
		}

		/**
		 * 设置选择完成回调接口
		 * 
		 * @param completed
		 */
		public void setSelectCompleted(OnSelectCompleted completed) {
			_completed = completed;
		}

		public SelectView() {

		}

		/**
		 * 初始化选择项列表
		 * 
		 * @param title
		 *            标题
		 * @param items
		 *            选择的列表,对应的类要实现ISelectViewItem接口
		 */
		public SelectView(String title, ArrayList<? extends ISelectItem> items) {
			_title = title;
			_lst_select = items;
		}

		/**
		 * 初始化选择项列表
		 * 
		 * @param title
		 *            标题
		 * @param items
		 *            选择的列表,对应的类要实现ISelectViewItem接口
		 * @param selectedId
		 *            默认选择的项的值
		 */
		public SelectView(String title, ArrayList<? extends ISelectItem> items, String selectedId) {
			_title = title;
			_lst_select = items;
			_selectId = selectedId;
		}

		/**
		 * 初始化选择项列表
		 * 
		 * @param title
		 *            标题
		 * @param items
		 *            选择的列表,对应的类要实现ISelectViewItem接口
		 * @param selectedId
		 *            默认选择的项的值
		 * @param completed
		 *            选择完成回调接口
		 */
		public SelectView(String title, ArrayList<? extends ISelectItem> items, String selectedId,
				OnSelectCompleted completed) {
			_title = title;
			_lst_select = items;
			_selectId = selectedId;
			_completed = completed;
		}
	}

	/**
	 * 选择项目数据接口
	 * 
	 * @author cubar
	 * 
	 */
	public interface ISelectViewItem extends ISelectItem {

		/**
		 * 获取选择项的值
		 * 
		 * @return
		 */
		String getID();

		/**
		 * 获取选择项显示的名称
		 * 
		 * @return
		 */
		String getName();
	}

	/**
	 * 选择完成事件接口
	 * 
	 * @author cubar
	 * 
	 */
	public interface OnSelectCompleted extends OnItemSelectCompleted {

	}

	// TODO 2016-07-28 11:42 何洪滔 增加新版本的日期节点类及接口定义

	/**
	 * 日期节点版本2
	 * 
	 * @author cubar
	 * 
	 */
	protected class DateViewV2 {

		private String _title;

		private Date _date;

		protected String getTitle() {
			return _title;
		}

		/**
		 * 获取日期
		 * 
		 * @return
		 */
		public Date getDate() {
			return _date;
		}

		/**
		 * 设置日期
		 * 
		 * @param date
		 */
		protected void setDate(Date date) {
			_date = date;
		}

		private OnDateSelectCompleted _completed;

		/**
		 * 获取选择完成调用接口
		 * 
		 * @return
		 */
		protected OnDateSelectCompleted getSelectCompleted() {
			return _completed;
		}

		public DateViewV2(String title, Date date,
				OnDateSelectCompleted completed) {
			_title = title;
			_date = date;
			_completed = completed;
		}
	}

	/**
	 * 日期节点选择完成接口
	 * 
	 * @author cubar
	 * 
	 */
	public interface OnDateSelectCompleted {

		/**
		 * 日期选择
		 * 
		 * @param date
		 */
		void OnDateSelect(Date date);
	}

	// TODO 2016-07-29 20:23 何洪滔 添加图片选择节点类及接口

	protected class ImageSelectView {
		private String _title;
		private String _images;
		private OnImageSelectCompleted _completed;
		
		private ImageGalleryAdapter _adt;

		/**
		 * 获取标题
		 * 
		 * @return
		 */
		protected String getTitle() {
			return _title;
		}

		/**
		 * 获取图片列表
		 * 
		 * @return
		 */
		protected String getImages() {
			return _images;
		}
		/**
		 * 设置图片列表
		 * @param images
		 */
		protected void setImages(String images){
			_images = images;
		}
		/**
		 * 获取图片数据适配器
		 * @return
		 */
		protected ImageGalleryAdapter getAdapter(){
			return _adt;
		}

		/**
		 * 获取选择回调接口
		 * 
		 * @return
		 */
		protected OnImageSelectCompleted getSelectCompleted() {
			return _completed;
		}

		public ImageSelectView(String title, String images, ImageGalleryAdapter adapter,
				OnImageSelectCompleted completed) {
			_title = title;
			_images = images;
			_adt = adapter;
			_completed = completed;
		}
	}

	/**
	 * 图片选择完成回调接口
	 * 
	 * @author cubar
	 * 
	 */
	public interface OnImageSelectCompleted {

		/**
		 * 选择到的所有图片列表,图片文件地址,使用";"间隔
		 * 
		 * @param images
		 */
		void OnImageSelect(String images);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值