刚接触android,现在有一个关于用SimpleCursorAdapter来对listview进行数据绑定的问题。
在onCreate函数里面有{
mydatabase = new MyDataBase(this);
     mydatabase.open();
}
一个buttonlistener
buttonsearch.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
UpdataAdapter();
}
});
数据查询与绑定
 public void UpdataAdapter(){
        Cursor cur = mydatabase.searchAll();
     while(cur.moveToNext()){
     Log.d("NAME____DDD",cur.getString(cur.getColumnIndex(MyDataBase.KEY_NAME)));
     Log.d("NUM____DDD",cur.getString(cur.getColumnIndex(MyDataBase.KEY_NUM)));
     }
     if(cur !=null && cur.getCount() >0){
     ListAdapter adapter = new SimpleCursorAdapter(this,R.layout.listview,cur, new String[]{MyDataBase.KEY_NUM,MyDataBase.KEY_NAME,MyDataBase.KEY_ID},
     new int[]{R.id.num1,R.id.name1,R.id.hid});
     lv.setAdapter(adapter);
     }
//       if(!cur.isClosed()){                ---------①
//     cur.close();        
//     }
    }
如果①的语句注释掉,listview会有数据显示。一切正常。
现在问题是如果把①后的三行语句没有注释掉,listview就不会有数据显示出来,但上面的log里面是有数据输出的。
求大神告诉我为什么啊。。

解决方案 »

  1.   

    在onPause方法的时候在调用吧。
    这个cursor在界面onCreate时候构建,那么我只要关注界面销毁时候是不是关闭就行了。其他用的时候不必关闭,否则要重建。
    另外,像cursorAdapter这样传进来了cursor它有自己的生命周期,有adapter去回收,我们放心用就好了啊。
      

  2.   

    你把它当成一个BaseAdapter就好。当你在构造的时候,并没有生成可视数据,而是在getCount(), getView()方法之后你的ListView中的数据才能被显示出来。在你的程序里,你在构造完Adapter以后,马上关闭了游标。这时候系统调用你Adapter方法会发现你的游标是空的,自然getCount() == 0,从而就不去调用getView()方法了。
      

  3.   


    是这样啊。。主要现在就是在我连续点查询那个按钮的时候log里面会包cursor没有关闭这个错。所以就想看看能不能在每次查询之后把他给关掉。