巧用“匿名内部类”获取自定义适配器里控件的焦点

昨天在论坛里看到一个人问了如题这个问题,刚好以前我也遇到过这个问题,仔细想了一下,大概有两种解决的方法分享给大家。

思路一 就是在getView的方法里怎么把参数position的值传给你所需要的方法体里。比如说适配器里放的是TextView和button,现在想单击button的

时候,用Toast给动态显示出来。那只要在getView里找到button后,然后给button注册一个自己自定义的适配器,把position当做参数送进去,就OK了。


public class MyOrder_ListViewAdapter extends SimpleAdapter {
	private Context mcontext;
	private LayoutInflater mInflater;
	public List<HashMap<String, Object>> list;
	private int layoutID;
	private String flag[];
	private int ItemIDs[];
	private List<Order> orderlists;
	Button mymenu_add_button;
	Button mymenu_delete_button;
	private Handler handler;

	public MyOrder_ListViewAdapter(Context context,
			List<? extends Map<String, ?>> list2, int resource, String[] from,
			int[] to, List<Order> orderlists, Handler handler) {
		super(context, list2, resource, from, to);
		mInflater = LayoutInflater.from(context);
		list = (List<HashMap<String, Object>>) list2;
		layoutID = resource;
		flag = from;
		ItemIDs = to;
		mcontext = context;
		this.orderlists = orderlists;
		this.handler=handler;
		// TODO Auto-generated constructor stub
	}

	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return list.get(arg0);
	}

	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return arg0;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		convertView = mInflater.inflate(R.layout.mymenu_list_item, null);
		mymenu_add_button= (Button) convertView.findViewById(R.id.mymenu_add_btn);
		mymenu_add_button.setOnClickListener(new myButtonListener(position));
		return convertView;
	}
	
	class myButtonListener implements OnClickListener {
		private int position;
		GridViewButtonListener(int pos) {
			position = pos;
		}
		public void onClick(View v) {		
			String dishnamegot = (String) ((HashMap<String, Object>) getItem(position))
					.get("TextViewd的key名");					
		}				
	}
}

自定义适配器类需要实现以下四个方法: 1. `getItemCount()`:用于返回数据集合中的条目数量。 2. `getItemViewType(int position)`:用于返回指定位置的条目类型。 3. `onCreateViewHolder(ViewGroup parent, int viewType)`:用于创建ViewHolder对象。 4. `onBindViewHolder(ViewHolder holder, int position)`:用于绑定ViewHolder对象和数据。 这些方法都是抽象方法,需要在适配器类中进行实现。其中,`getItemCount()`和`onBindViewHolder()`方法是必须实现的,而`getItemViewType()`和`onCreateViewHolder()`方法则是根据实际需要进行实现的。 例如,我们可以创建一个自定义适配器类`MyAdapter`,如下所示: ``` public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public int getItemCount() { return mData.size(); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { String item = mData.get(position); holder.textView.setText(item); } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView textView; public ViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.text_view); } } } ``` 在这个例子中,我们定义了一个自定义适配器类`MyAdapter`,继承自RecyclerView.Adapter类,并指定了一个泛型参数ViewHolder。在适配器类中,我们实现了`getItemCount()`、`onCreateViewHolder()`和`onBindViewHolder()`三个必须实现的方法。同时,我们还定义了一个ViewHolder内部类,用于保存每个条目中的视图控件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值