Android 动态创建Android控件、绑定事件处理的新方法

时间:2022-08-30 21:35:54
Android开发中常有列表、数据类控件需要动态创建的情形,如:第三方支付APP客户端提供的功能模块,通过一个个ICON或者文字列表的方式显示给用户;以及其他一些为动态创建的控件附加事件绑定等实现时,那么这些数据、事件帮顶顶往往都是动态管理的,以下我对这类实现的一些思路:
1、将控件的公共属性、事件绑定都看做是一个完整体,每个完整体(类对象)的实现,包括属性、事件绑定

2、控件进行属性、事件的适配处理器

     在这些子类适配对象中进行各自不同逻辑的处理,对于相同的部分也可通过抽象基类完成。

 

实现效果:

Android 动态创建Android控件、绑定事件处理的新方法


主要设计如下:

Android 动态创建Android控件、绑定事件处理的新方法



示例代码:

		// 初始化
		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;
	}
}


完整代码,点击下载


其他场景应用:

      同样的,对于终端视频类搜索应用中,动态键盘的创建、初始化与键盘事件响应也可采用这种方式,应用时屡试不爽。

Android 动态创建Android控件、绑定事件处理的新方法