Java Android ListView显示错误的位置
我对Java Android ListView显示错误的位置,java,android,xml,listview,Java,Android,Xml,Listview,我对列表视图有问题。下面是适配器的代码: public class AdapterListViewEncyclopedia extends ArrayAdapter<Apple> { private int layoutResourceId; private Context context; private List<Apple> data; private CellHolder holder; public AdapterLi
列表视图有问题。下面是适配器的代码:
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;
}
}
公共类适配器列表百科全书扩展了ArrayAdapter{
私人内部布局资源;
私人语境;
私人名单数据;
私人手机持有者;
公共适配器列表百科全书(上下文上下文、内部布局资源ID、列表数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
静态类信元保持器
{
ImageView imageApple;
文本视图tvCellAppleName;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
视图行=转换视图;
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新的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());
系统输出打印项次(位置);
row.setTag(支架);
}
其他的
{
holder=(CellHolder)行。getTag();
}
返回行;
}
}
主要问题:
1.我在ArrayAdapter
中有10个数据,当我用ListView
打开页面,用System.out.println
打印位置代码时,代码显示为0,1,2,3,4,5,0
2.当我滚动列表视图时,顶部和底部隐藏的是随机位置
有人能帮我解决问题吗?我已经更新了代码,请试试这个。必须在if-else块之后设置数据,否则在绑定数据时无法在listview中获得正确的位置。请参阅android视图持有者属性
公共类适配器列表百科全书扩展了ArrayAdapter{
私人内部布局资源;
私人语境;
私人名单数据;
私人手机持有者;
公共适配器列表百科全书(上下文上下文、内部布局资源ID、列表数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
静态类信元保持器
{
ImageView imageApple;
文本视图tvCellAppleName;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
视图行=转换视图;
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新的CellHolder();
holder.imageApple=(ImageView)row.findViewById(R.id.imageApple);
holder.tvCellAppleName=(TextView)row.findViewById(R.id.tvAppleName);
row.setTag(支架);
}
其他的
{
holder=(CellHolder)行。getTag();
}
//您可以在这里设置数据
设置数据(位置、支架);
返回行;
}
私有无效设置数据(内部位置,单元持有者)
{
ImageLoader ImageLoader=ImageLoader.getInstance();
imageLoader.displayImage(InterfaceConfig.serverURL+data.get(position.getImageURL(),holder.imageApple);
holder.tvCellAppleName.setText(data.get(position.getName());
}
}
我已经更新了代码,请尝试一下。必须在if-else块之后设置数据,否则在绑定数据时无法在listview中获得正确的位置。请参阅android视图持有者属性
公共类适配器列表百科全书扩展了ArrayAdapter{
私人内部布局资源;
私人语境;
私人名单数据;
私人手机持有者;
公共适配器列表百科全书(上下文上下文、内部布局资源ID、列表数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
静态类信元保持器
{
ImageView imageApple;
文本视图tvCellAppleName;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
视图行=转换视图;
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新的CellHolder();
holder.imageApple=(ImageView)row.findViewById(R.id.imageApple);
holder.tvCellAppleName=(TextView)row.findViewById(R.id.tvAppleName);
row.setTag(支架);
}
其他的
{
holder=(CellHolder)行。getTag();
}
//您可以在这里设置数据
设置数据(位置、支架);
返回行;
}
私有无效设置数据(内部位置,单元持有者)
{
ImageLoader ImageLoader=ImageLoader.getInstance();
imageLoader.displayImage(InterfaceConfig.serverURL+data.get(position.getImageURL(),holder.imageApple);
holder.tvCellAppleName.setText(data.get(position.getName());
}
}
阅读您的代码。。。当您设置文本时?除非…我也不知道为什么那些人使用那个臭名昭著的视图持有者。。。与它的问题相比,它能提供多少帮助?@selvin:对不起,我已经更新了代码。@pskink:我以前做过。它运行得很好,但在这种情况下,我不知道为什么在滚动页面时它运行错误。那么您在哪里/何时调用setText
?阅读您的代码。。。当您设置文本时?除非…我也不知道为什么那些人使用那个臭名昭著的视图持有者。。。与它的问题相比,它能提供多少帮助?@selvin:对不起,我已经更新了代码。@pskink:我以前做过
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());
}
}