【问题标题】:Android ListView with SQLite带有 SQLite 的 Android ListView
【发布时间】:2011-02-11 19:36:53
【问题描述】:

我想刷新 Listview 项目。这些项目是从 SQLite 数据库填充的。我的代码在下面

public class Weeve extends Activity {
      private String[] lv_arr;
    protected ListView CView;
    private DBAdapter mDbHelper;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

   mDbHelper = new DBAdapter(this);
    mDbHelper.open();

    Cursor c = mDbHelper.getAll();
    if (c.getCount() > 0)
    {if (c.moveToFirst())
    {
        ArrayList strings = new ArrayList();
       do {                    
          String mC = c.getString(0);
          strings.add(mC);  

       } while (c.moveToNext());
       lv_arr = (String[]) strings.toArray(new String[strings.size()]);
    }
    }  
    else Toast.makeText(this, 
           "No more Records", 
           Toast.LENGTH_SHORT).show();
    c.close();

    ListView CView = new ListView(this);
    CView.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, lv_arr));      
    setContentView(CView);}}

我想在添加、更新或删除 SQLite 表后刷新此列表视图。这些操作由内容或选项菜单调用。我试图将这些代码创建为一个单独的函数,并在每次操作后调用它。但不能。我认为 setContentView(CView) 声明。

我还尝试使用 SimpleCursorAdapter,例如来自 Android.com 的记事本示例。我得到线程错误。帮帮我。

【问题讨论】:

    标签: android sqlite listview


    【解决方案1】:

    您可以使用 Adapter.notifyDataSetChanged() 来做到这一点。

    但是,我发现您的代码略有偏差。您正在使用游标从数据库中获取行,只是为了为行值创建一个新的 ArrayAdapter。为什么不使用 CursorAdapter 来支持您的列表?这就是它的意义所在。

    【讨论】:

      【解决方案2】:

      确保您的所有活动都在清单中

      【讨论】:

      • 如果我们使用SimpleCursorAdapter,我们必须添加主键列'_id'。我得到这个错误是由这个列名'_id'引起的。
      猜你喜欢
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 2017-09-28
      相关资源
      最近更新 更多