1、将控件的公共属性、事件绑定都看做是一个完整体,每个完整体(类对象)的实现,包括属性、事件绑定
2、控件进行属性、事件的适配处理器
在这些子类适配对象中进行各自不同逻辑的处理,对于相同的部分也可通过抽象基类完成。
实现效果:
主要设计如下:
示例代码:
// 初始化 List<ListItemFunction> func = new ArrayList<ListItemFunction>(); func.add(new StatementFunction(this, new ListItemInfo("声明", android.R.drawable.ic_menu_info_details))); func.add(new CheckFunction(this, new ListItemInfo("检测", android.R.drawable.ic_menu_view))); func.add(new ViewReportFunction(this, new ListItemInfo("查看报告", android.R.drawable.ic_menu_agenda))); func.add(new ToolsFunction(this, new ListItemInfo("工具", android.R.drawable.ic_menu_manage))); func.add(new SettingFunction(this, new ListItemInfo("设置", android.R.drawable.ic_menu_edit))); func.add(new AboutFunction(this, new ListItemInfo("关于", android.R.drawable.ic_menu_help))); func.add(new ExitFunction(this, new ListItemInfo("退出", android.R.drawable.ic_lock_power_off))); mylistView = (ListView) findViewById(R.id.mylistView); mylistView.setAdapter(new FunctionsAdapter(this, func));
/** * 对象适配器 * * @author xu.jian */ public class FunctionsAdapter extends BaseAdapter { private Context context = null; // 上下文 private List<ListItemFunction> list = null; // 数据源 private TextView title = null; private ImageView icon = null; // 适配器构造函数 public FunctionsAdapter(Context c, List<ListItemFunction> list) { this.context = c;// c是上下文,在UI编程中,一般这个参数都是必要的 this.list = list;// list中是一个Function数组,存放了所有要显示的Function } // 下面三个是实现抽象函数,可以无视 public int getCount() { return list.size(); } public Object getItem(int position) { return list.get(position); } public long getItemId(int position) { return position; } // 自定义View public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.list_home, null); title = (TextView) convertView.findViewById(R.id.itemTitle); icon = (ImageView) convertView.findViewById(R.id.itemImage); ListItemFunction func = list.get(position); Drawable img = context.getResources().getDrawable(func.item.iconId); img.setBounds(0, 0, img.getIntrinsicWidth(), img.getIntrinsicHeight()); icon.setImageDrawable(img); title.setText(func.item.title); convertView.setOnClickListener(func.getOnClickListener()); convertView.setOnCreateContextMenuListener(func .getOnContextMenuClickListener()); } return convertView; } }
完整代码,点击下载
其他场景应用:
同样的,对于终端视频类搜索应用中,动态键盘的创建、初始化与键盘事件响应也可采用这种方式,应用时屡试不爽。