Android中自定义ListView的奇怪bug
我已经在上重复了ListView代码。 我已经根据自己的使用习惯对它进行了修改。它在一定程度上起作用。我解释: 我在列表中添加了6个元素。成功了! 我可以用按钮删除元素。 它仅适用于前2个元素。之后(删除前2个元素):元素从列表(列表)中完全删除,但显示与此列表不对应。此外,删除的元素被阻止Android中自定义ListView的奇怪bug,android,listview,Android,Listview,我已经在上重复了ListView代码。 我已经根据自己的使用习惯对它进行了修改。它在一定程度上起作用。我解释: 我在列表中添加了6个元素。成功了! 我可以用按钮删除元素。 它仅适用于前2个元素。之后(删除前2个元素):元素从列表(列表)中完全删除,但显示与此列表不对应。此外,删除的元素被阻止 public class ItemAdapter extends ArrayAdapter<Task> { List<Task> data; Context con
public class ItemAdapter extends ArrayAdapter<Task> {
List<Task> data;
Context context;
int layoutResID;
final Handler handle = new Handler();// For the threads
Runnable runab;
public ItemAdapter(Context context, int layoutResourceId, List<Task> data) {
super(context, layoutResourceId, data);
this.data = data;
this.context = context;
this.layoutResID = layoutResourceId;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
TaskHolder holder = null;
View rowBack = convertView;
holder = null;
if(rowBack == null)
{
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
rowBack = inflater.inflate(layoutResID, parent, false);
holder = new TaskHolder();
holder.deleteButton =(Button)rowBack.findViewById(R.id.swipe_button1);
rowBack.setTag(holder);
}
else
{
holder = (TaskHolder) rowBack.getTag();
}
Task itemdata = data.get(position);
title.setText(itemdata.getName());
holder.deleteButton.setOnClickListener(new View.OnClickListener() {
int position1 = position;
@Override
public void onClick(View v) {
if(position1 != -1 && position1 < data.size()) {
remove( data.get(position1) );
notifyDataSetChanged();
}
}
});
return rowBack;
}
public List<Task> getData() {
return data;
}
public void setData(List<Task> data) {
this.data = null;
this.data = data;
}
static class TaskHolder {
TextView name;
TextView priority;
TextView deadline;
TextView time;
Button deleteButton;
Button statButton;
Button settingButton;
Button stopButton;
}
}
公共类ItemAdapter扩展了ArrayAdapter{
列出数据;
语境;
int layoutResID;
final Handler=new Handler();//用于线程
可运行的runab;
公共项适配器(上下文上下文、int-layoutResourceId、列表数据){
超级(上下文、布局资源ID、数据);
这个数据=数据;
this.context=上下文;
this.layoutResID=layoutResourceId;
}
@凌驾
公共视图getView(最终整型位置、视图转换视图、最终视图组父视图){
任务负责人=null;
视图返回=转换视图;
holder=null;
如果(返回==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
rowBack=充气机。充气(layoutResID,父级,false);
持有者=新的任务持有者();
holder.deleteButton=(按钮)rowBack.findViewById(R.id.swipe_button1);
rowBack.setTag(支架);
}
其他的
{
holder=(任务负责人)rowBack.getTag();
}
Task itemdata=data.get(位置);
title.setText(itemdata.getName());
holder.deleteButton.setOnClickListener(新视图.OnClickListener(){
int位置1=位置;
@凌驾
公共void onClick(视图v){
if(位置1!=-1&&position1
我知道很多人已经问过这样的问题,但在这里,这不是一回事
我不知道这是否正常,但我的列表中有6个元素。getView方法仅针对位置0,1,2,3调用。(我在航海日志上看到);我从未在Logcat上看到位置4和5
另一点,当我打开手机时,应用程序返回onCreate中的ActivityMain,显示错误被修复。但是每当我删除一个项目时,我都需要这样做。调用
getView()
函数的次数将与屏幕上可见列表项目的次数相同,而不是与数组中的元素数相同。是的,屏幕上可见6个项目。