通过自定义适配器的ListView迭代 [英] Iterate through ListView in custom Adapter
本文介绍了通过自定义适配器的ListView迭代的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个自定义的的ListView
。每一行包含一个的TextView
和的ImageView
。
I have a custom ListView
. Each row contains a TextView
and ImageView
.
看截图:
在项目点击我作出这样的的ImageView
可见。但问题是,只有一个的ImageView
应在同一时间可见。
On Item click I make that ImageView
visible. But the problem is that only ONE ImageView
should be visible at a time.
我认为最好的办法是将所有其他 ImageViews
为看不见
上点击。而且走了之后的所有图像进行点击有一个可见
。
I think that the best approach is to set all other ImageViews
as INVISIBLE
on click. And after all images gone make a clicked one VISIBLE
.
但我不知道如何正确地进行迭代的适配器
:
But I don't know how to iterate properly that in Adapter
:
private class TimeZoneItemAdapter extends ArrayAdapter<String> {
private Activity myContext;
private ArrayList<String> datas;
public TimeZoneItemAdapter(Context context, int textViewResourceId, ArrayList<String> objects) {
super(context, textViewResourceId, objects);
myContext = (Activity) context;
datas = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = myContext.getLayoutInflater();
convertView = inflater.inflate(R.layout.listview_item, null);
viewHolder = new ViewHolder();
viewHolder.postNameView = (TextView) convertView.findViewById(R.id.listview_item);
viewHolder.postImageView = (ImageView) convertView.findViewById(R.id.image_mark);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.postNameView.setText(datas.get(position));
viewHolder.postNameView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//clear all image views during iteration
View view;
for (int i = 0; i < datas.size(); i++) {
//dont know which parameter need there for proper iteration
view = getView(i, ?????, null);
ImageView image = (ImageView) view.findViewById(R.id.image_mark);
image.setVisibility(View.INVISIBLE);
}
if (viewHolder.postImageView.getVisibility() != View.VISIBLE) {
selectedTimeZone = viewHolder.postNameView.getText().toString();
viewHolder.postImageView.setVisibility(View.VISIBLE);
} else {
viewHolder.postImageView.setVisibility(View.INVISIBLE);
}
}
});
return convertView;
}
class ViewHolder {
TextView postNameView;
ImageView postImageView;
}
}
请帮我或给一些提示。我真的很困惑与已
Please help me or give some hints. I'm really confused with that already.
推荐答案
有一个解决方案:
private static View lastClicked = null;
... ...
viewHolder.postNameView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View parentRow = (View) v.getParent();
ViewHolder viewHolder = (ViewHolder)parentRow.getTag();
if(viewHolder.postImageView.getVisibility() != View.VISIBLE)
{
//clear last clicked image
if(lastClicked != null)
{
ViewHolder lastHolder = (ViewHolder)lastClicked.getTag();
lastHolder.postImageView.setVisibility(View.INVISIBLE);
}
selectedTimeZone = viewHolder.postNameView.getText().toString();
viewHolder.postImageView.setVisibility(View.VISIBLE);
lastClicked = parentRow;
}
else
{
viewHolder.postImageView.setVisibility(View.INVISIBLE);
lastClicked = null;
}
});
希望这有助于!
这篇关于通过自定义适配器的ListView迭代的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文