用BaseAdapter时,在ListView的onItemClick方法狂报 ClassCastException:java.lang.Boolean

原因:

通常在使用simpleCursorAdapter的listview中的onItemClick方法中,

使用Cursor cursor = (Cursor)listView.getItemAtPosition(position);可以的到改位置的cursor,

但如果使用BaseAdapter,由于我们重写了 

@Override

	public Object getItem(int position) {
		return cursor.moveToPosition(position);
	}

而listView的getItemAtPosition方法内部会调用到getItem,所以listView.getItemAtPosition(position)实际上不是返回Object而是boolean值

这个错误是因为 SimpleAdapter 无法将 TextureView 视为视图来绑定。解决方案是使用自定义适配器(Custom Adapter),并在适配器的 getView() 方法中手动绑定 TextureView。以下是示例代码: ```java public class CustomAdapter extends BaseAdapter { private Context mContext; private List<MyData> mDataList; public CustomAdapter(Context context, List<MyData> dataList) { mContext = context; mDataList = dataList; } @Override public int getCount() { return mDataList.size(); } @Override public Object getItem(int position) { return mDataList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; ViewHolder holder; if (view == null) { view = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false); holder = new ViewHolder(); holder.textureView = (TextureView) view.findViewById(R.id.texture_view); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } // Bind TextureView here MyData data = mDataList.get(position); holder.textureView.setSurfaceTexture(data.getSurfaceTexture()); return view; } private static class ViewHolder { TextureView textureView; } } ``` 在这个示例中,我们创建了一个自定义适配器 CustomAdapter,其中包含一个名为 ViewHolder 的内部类,用于保存视图的引用。在 getView() 方法中,我们手动绑定 TextureView,然后返回视图。 使用自定义适配器后,可以像这样设置列表视图: ```java List<MyData> dataList = getDataList(); CustomAdapter adapter = new CustomAdapter(this, dataList); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter); ``` 其中,getDataList() 方法根据您的需要返回数据列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值