Reputation: 453
I have a problem with ListView
. Here the code of adapter :
public class AdapterListViewEncyclopedia extends ArrayAdapter<Apple> {
private int layoutResourceId;
private Context context;
private List<Apple> data;
private CellHolder holder;
public AdapterListViewEncyclopedia(Context context, int layoutResourceId, List<Apple> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
static class CellHolder
{
ImageView imageApple;
TextView tvCellAppleName;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View row = convertView;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new CellHolder();
holder.imageApple = (ImageView) row.findViewById(R.id.imageApple);
holder.tvCellAppleName = (TextView)row.findViewById(R.id.tvAppleName);
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(InterfaceConfig.serverURL+data.get(position).getImageURL(), holder.imageApple);
holder.tvCellAppleName.setText(data.get(position).getName());
System.out.println(position);
row.setTag(holder);
}
else
{
holder = (CellHolder)row.getTag();
}
return row;
}
}
The Main Problem :
1.I have 10 data in ArrayAdapter<Apple>
and When i open page with ListView
and i print position code with System.out.println
, the code show 0,1,2,3,4,5,0
2. When i scroll the ListView
, Top and Bottom which hidden is random position.
Anyone can help me to solve my problem?
Upvotes: 0
Views: 1631
Reputation: 5061
I have update the code pls try this. You have to set the data after the if-else block other wise you cannot get the correct position in the listview while binding the data. Please refer the android view holder properties ViewHolder
public class AdapterListViewEncyclopedia extends ArrayAdapter<Apple> {
private int layoutResourceId;
private Context context;
private List<Apple> data;
private CellHolder holder;
public AdapterListViewEncyclopedia(Context context, int layoutResourceId, List<Apple> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
static class CellHolder
{
ImageView imageApple;
TextView tvCellAppleName;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View row = convertView;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new CellHolder();
holder.imageApple = (ImageView) row.findViewById(R.id.imageApple);
holder.tvCellAppleName = (TextView)row.findViewById(R.id.tvAppleName);
row.setTag(holder);
}
else
{
holder = (CellHolder)row.getTag();
}
// you can set the data here
setData(position,holder);
return row;
}
private void setData(int position, CellHolder holder)
{
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(InterfaceConfig.serverURL+data.get(position).getImageURL(), holder.imageApple);
holder.tvCellAppleName.setText(data.get(position).getName());
}
}
Upvotes: 2