使用SQLite数据库设置Base适配器时,数据相互重叠

时间:2017-11-20 04:35:37

标签: android sqlite listview arraylist

我正在制作一个待办事项列表应用程序,我创建了一个SQLite数据库并将其与我的应用程序相关联,除了数组中的数据外,一切似乎都很好,它们在创建新项目时相互克服,就像我设置第一个任务(研究)和第二个任务(研究)时,它创建两个不同的项目,每个项目都有名称(StudyResearch)...这里是我的代码与基础适配器,光标和inflater。

 class MyCustomAdapter extends BaseAdapter
{
    ArrayList<ListItem> Items=new ArrayList<ListItem>();
    MyCustomAdapter(ArrayList<ListItem> Items ) {
        this.Items=Items;

    }


    @Override
    public int getCount() {
        return (int) DatabaseUtils.queryNumEntries(db, "tasks");
    }

    @Override
    public String getItem(int position) {
        return Items.get(position).Name;

    }

    @Override
    public long getItemId(int position) {
        return  position;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        String[] cols = {"id", "name", "time", "date"};
        Cursor pointer = db.query("tasks", cols, null,null,null,null,null);
        String name = "";
        String time = "";
        String date = "";
        //String data = "";
        while (pointer.moveToNext()){
            name += pointer.getString(1);
            time += pointer.getString(2);
            date += pointer.getString(3);

            //data += pointer.getInt(0) + " - " +  pointer.getString(1) + " - " + pointer.getInt(2) +" - "  + pointer.getInt(3);

        }

        LayoutInflater linflater =getLayoutInflater();
        View view1=linflater.inflate(R.layout.row_view, null);

        final CheckedTextView tvTasks =(CheckedTextView) view1.findViewById(R.id.tvTasks);
        CheckedTextView tvDesc =(CheckedTextView) view1.findViewById(R.id.tvDesc);
        tvTasks.setText(name);
        tvDesc.setText(date + "(" + time + ")");   //date + "(" + time + ")"


        tvTasks.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tvTasks.toggle();
            }
        });

        return view1;

    }

1 个答案:

答案 0 :(得分:0)

您遇到的问题是您正在遍历游标中的所有数据并结合+ =连接所检索的数据。 而你想要做的是位置到光标中的相应行,并从该行获取数据(不是我推荐这种方式,因为CursorAdapter更适合)< / em>的

所以而不是: -

    while (pointer.moveToNext()){
        name += pointer.getString(1);
        time += pointer.getString(2);
        date += pointer.getString(3);
    }

您可以使用: -

     if (pointer.moveToPosition(i)){
        name = pointer.getString(1);
        time = pointer.getString(2);
        date = pointer.getString(3);
    }

这确实假设指针光标和源数组的构建顺序是相同的。