我遇到的问题很不寻常。我正在使用custon arrayadapter类进行listview。 适合屏幕区域的列表项显示为正常,而需要滚动显示的项目可能是错误的顺序,或者只是重复列表顶部的项目。此外,通过向上和向下滚动,有时项目的顺序会发生变化。
虽然我通过点击调试故障项目时所有数据都是正确的。
taskList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long arg3) {
TaskEntity temp = (TaskEntity) adapter.getItemAtPosition(position);
Toast.makeText(ScreenMain.this, "test : " + temp.toString(),Toast.LENGTH_LONG).show();
}
});
此错误仅发生在HTC Wildfire Platform 2.3.5 Api Level 10手机中。
但是当我在三星Galaxy S3 4.1.2平台Api Level 16手机上测试我的应用程序时,一切都很好。
为什么我收到此错误? 我的自定义适配器是问题吗?
public class MyTaskListAdapter extends ArrayAdapter<TaskEntity> {
private final List<TaskEntity> list;
private final Activity context;
public MyTaskListAdapter(Activity context, List<TaskEntity> objects) {
super(context, R.layout.row_task_layout, objects);
this.context = context;
this.list = objects;
}
static class ViewHolder {
protected TextView label;
protected TextView count;
protected ImageView icon;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.row_task_layout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.label = (TextView) view.findViewById(R.id.label);
viewHolder.count = (TextView) view.findViewById(R.id.count);
viewHolder.icon = (ImageView) view.findViewById(R.id.icon);
view.setTag(viewHolder);
ViewHolder holder = (ViewHolder) view.getTag();
holder.label.setText(list.get(position).title);
if(Integer.parseInt(list.get(position).tbl_durum)==1)
{
holder.icon.setImageResource(R.drawable.check_icon);
}
if(Integer.parseInt(list.get(position).child_count)==0)
{
holder.count.setVisibility(View.GONE);
}
else
{
holder.count.setText(list.get(position).child_count);
}
} else {
view = convertView;
}
return view;
}
}
答案 0 :(得分:2)
试试这个:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.row_task_layout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.label = (TextView) view.findViewById(R.id.label);
viewHolder.count = (TextView) view.findViewById(R.id.count);
viewHolder.icon = (ImageView) view.findViewById(R.id.icon);
view.setTag(viewHolder);
ViewHolder holder = (ViewHolder) view.getTag();
holder.label.setText(list.get(position).title);
if(Integer.parseInt(list.get(position).tbl_durum)==1)
{
holder.icon.setImageResource(R.drawable.check_icon);
}
if(Integer.parseInt(list.get(position).child_count)==0)
{
holder.count.setVisibility(View.GONE);
}
else
{
holder.count.setText(list.get(position).child_count);
}
return view;
}
}
基本上使用convertView传递。这导致了很多这些问题。 如果列表中没有那么多对象,那就不重要了。