Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中自定义ListView的奇怪bug_Android_Listview - Fatal编程技术网

Android中自定义ListView的奇怪bug

Android中自定义ListView的奇怪bug,android,listview,Android,Listview,我已经在上重复了ListView代码。 我已经根据自己的使用习惯对它进行了修改。它在一定程度上起作用。我解释: 我在列表中添加了6个元素。成功了! 我可以用按钮删除元素。 它仅适用于前2个元素。之后(删除前2个元素):元素从列表(列表)中完全删除,但显示与此列表不对应。此外,删除的元素被阻止 public class ItemAdapter extends ArrayAdapter<Task> { List<Task> data; Context con

我已经在上重复了ListView代码。 我已经根据自己的使用习惯对它进行了修改。它在一定程度上起作用。我解释:

我在列表中添加了6个元素。成功了! 我可以用按钮删除元素。 它仅适用于前2个元素。之后(删除前2个元素):元素从列表(列表)中完全删除,但显示与此列表不对应。此外,删除的元素被阻止

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个项目。