我有自定义适配器的列表视图。自定义的adater只是TextView和2个ImageButton。 当单击ImageButton时,我希望它的图像切换。然而,这工作,当我向下滚动一些随机项目也切换。带有自定义适配器状态持久性的ListView
所以我认为这与屏幕上物品位置的相对性有关。所以我给每个ImageButton分配一个标签,这个标签对应于它在列表视图中的位置。然后,我使用下面的代码来正确选择必要的项目:
int firstVisiblePos = listView.getFirstVisiblePosition();
int viewPos = 0;
int position = Integer.parseInt(v.getTag().toString());
Toast.makeText(this, v.getTag().toString(), Toast.LENGTH_SHORT).show();
for (int i = 0; i < listView.getChildCount(); i++) {
viewPos = firstVisiblePos + i;
if (viewPos == position) {
relativeLayout = (RelativeLayout) listView.getChildAt(position);
break;
}
}
但我仍然经历同样的行为。 任何帮助表示赞赏。
UPD:
public class CustomAdapter extends BaseAdapter {
private ArrayList<String> data;
private Activity myActivity;
private LayoutInflater inflater;
public CustomAdapter(Activity activity, ArrayList<String> data) {
this.myActivity = activity;
this.data = data;
this.inflater = (LayoutInflater) myActivity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_row, null);
}
TextView proverb = (TextView) convertView.findViewById(R.id.title);
proverb.setText(data.get(position));
proverb.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 14);
proverb.setTypeface(MainActivity.tf, 1);
ImageButton favBtn = (ImageButton) convertView.findViewById(R.id.btn_favorite);
if(MainActivity.favorites.contains(data.get(position))){
// favorite, set fav icon
favBtn.setImageDrawable(myActivity.getResources().getDrawable(R.drawable.fav));
}
favBtn.setTag(position);
return convertView;
}
}
发表您的自定义适配器的您getView()方法。 –
从getView()其不清楚,所以发布你的完整Adapter类。 –