Android如何通过单击ImageView从ArrayAdapter获取id
我在ArrayAdapter中放置了一个ImageView,列表如下所示:Android如何通过单击ImageView从ArrayAdapter获取id,android,Android,我在ArrayAdapter中放置了一个ImageView,列表如下所示: //... intent.putExtra(LearningCardActivity.CURRENT_CARD_LIST_ID, holder.position); //... 名称1 |图像视图| 名称2 |图像视图| 名称3 |图像视图| 以此类推 我不知道单击ImageView后如何获取项目id @Override public View getView(int position, View contextVi
//...
intent.putExtra(LearningCardActivity.CURRENT_CARD_LIST_ID, holder.position);
//...
名称1 |图像视图|
名称2 |图像视图|
名称3 |图像视图|
以此类推
我不知道单击ImageView后如何获取项目id
@Override
public View getView(int position, View contextView, ViewGroup parent) {
final ViewHolder viewHolder;
View rowView = contextView;
final CardList list = _cardList.get(position);
if (rowView == null) {
LayoutInflater layoutInflater = _context.getLayoutInflater();
rowView = layoutInflater.inflate(R.layout.cardlist_viewlist_tpl, null, true);
viewHolder = new ViewHolder();
viewHolder.tvCardListName = (TextView) rowView.findViewById(R.id.tvCardListName);
viewHolder.btnCardListLearn = (ImageView) rowView.findViewById(R.id.btnCardListLearn);
viewHolder.btnCardListLearn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(_context, LearningCardActivity.class);
//!!!!!!!!!!!!!!!
//this doesn't work, I always get 1st positon Id
intent.putExtra(LearningCardActivity.CURRENT_CARD_LIST_ID, list.getId());
//!!!!!!!!!!!!!!!!
_context.startActivity(intent);
}
});
rowView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) rowView.getTag();
}
viewHolder.tvCardListName.setText(list.getName());
return rowView;
}
似乎您正在使用
rowView/contextView
,并且只有在rowView等于null
时才设置onClickListener。这基本上意味着viewholder
对象上的侦听器只会在第一次调用getView()
时设置。因此,您将始终看到相同的第一项id
如果要为每一行设置侦听器,则需要更改逻辑并移动setOnClickListener()
调用
public View getView(int position, View contextView, ViewGroup parent) {
View rowView = contextView;
if (rowView == null) {
// Code here will only be run the very first time
// (when the row view hasn't been constructed yet)
} else {
// Code here will be run after that, since we're
// re-using the row's view
}
}
可以在ViewHolder类上添加属性,如:
static class ViewHolder {
//...
int position;
}
在返回视图之前设置此属性:
//...
viewHolder.position = position;
return rowView;
现在,您可以使用holder.position在侦听器上使用项目ID。
在您的情况下,应该是这样的:
//...
intent.putExtra(LearningCardActivity.CURRENT_CARD_LIST_ID, holder.position);
//...
我不确定这是否是更好的方法,但它对我有效
基于: