android listview滚动错误

时间:2012-06-05 07:32:15

标签: android database listview

我的listview有问题,数据完全正常工作但是当我滚动它时标题不断重复,但当我点击它时内容正在工作。

这是模拟器中的图像。

enter image description here

这是我数据库中的数据

这是我在listview中使用的代码

dataset_cursor = helper.getBooksByTitle2();   
startManagingCursor(dataset_cursor);        
adapter = new ContentAdapter(dataset_cursor);
list.setAdapter(adapter);`

class ContentAdapter extends CursorAdapter{
    ContentAdapter(Cursor c)
    {
        super(LEGALe.this, c);
    }
    public void bindView(View row, Context ctxt, Cursor c)
    {
        ContentHolder holder = (ContentHolder)row.getTag();
        holder.populateFrom(c, helper);
    }
    public View newView (Context ctxt, Cursor c, ViewGroup parent)
    {
        LayoutInflater inflater = getLayoutInflater();
        View row = inflater.inflate(R.layout.row2, parent, false);
        ContentHolder holder = new ContentHolder(row);
        row.setTag(holder);
        return(row);
    }
}

public Cursor getBooksByTitle2()
{
    return (getReadableDatabase().rawQuery("SELECT _id,table_of_content FROM tblContent WHERE title_id='"+ LEGALe.passedVar.toString() +"' ORDER BY table_of_content" , null));
}

3 个答案:

答案 0 :(得分:0)

它与查看项目的回收有关。我认为您没有正确管理 getView

但是,我的建议是使用addHeaderView将标题设置为列表标题中的视图。 或者,也许完全从 ListView 中取出它(因此它始终可见)并在 ListView 之上单独设置为TextView

答案 1 :(得分:0)

如果你在我的问题中看到丢失的数据显示在listview内,android只创建了活动上可见的列表项的那么多实例,滚动列表后它将相同的实例分配给其他项目on ..这就是为什么你的滚动标题不断重复

例如,如果列表显示10项如item1,item2 ------- item10意味着在滚动后创建10个实例,看到第11项android为12 2实例分配1个实例,依此类推

答案 2 :(得分:0)

您的适配器似乎没有正确实现,请执行以下操作:

dataset_cursor = helper.getBooksByTitle2();
startManagingCursor(dataset_cursor);
adapter = new ContentAdapter(dataset_cursor); list.setAdapter(adapter);

class ContentAdapter extends CursorAdapter
{ 
       ContentAdapter(Cursor c) 
       { 
           super(LEGALe.this, c); 
       } 
       public void bindView(View row, Context ctxt, Cursor c) 
       { 
           //Get Item from Cursor
           //Set values to views
       } 
       public View newView (Context ctxt, Cursor c, ViewGroup parent) 
       { 
            LayoutInflater inflater = getLayoutInflater(); 
            View row = inflater.inflate(R.layout.row2, parent, false); 
            return(row); 
        } 
   }

   public Cursor getBooksByTitle2() 
   { 
        return (getReadableDatabase().rawQuery("SELECT _id,table_of_content FROM tblContent WHERE                title_id='"+ LEGALe.passedVar.toString() +"' ORDER BY table_of_content" , null)); 
   }