【问题标题】:Android Binding SQLite to GridView in EclipseAndroid 在 Eclipse 中将 SQLite 绑定到 GridView
【发布时间】:2011-10-28 09:08:05
【问题描述】:

我编写了以下代码来从 SQLite 数据库中检索数据。

public Cursor fetchAllScores() {
    return database.query(DATABASE_TABLE, new String[] { KEY_ROWID,
            KEY_PLAYDATE, KEY_NUMVALA, KEY_NUMVALB }, null, null, null,
            null, null);
}

然后我在我的 main.java 文件中使用以下代码调用这个函数

cursor = dbHelper.fetchAllScores();
    startManagingCursor(cursor);

获得光标后,我设法使用以下代码用一些数据填充 myGridView

GridView myGV = (GridView)findViewById(R.id.gridView1);

    String[] cols = new String[] { scoreDbAdapter.KEY_PLAYDATE, scoreDbAdapter.KEY_NUMVALA, scoreDbAdapter.KEY_NUMVALB};
    int[]   views = new int[] { android.R.id.text1, android.R.id.text2, android.R.id.text2 };

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
            android.R.layout.simple_list_item_1, cursor, cols, views);

    Log.w("NumRows",adapter.getCount() + "");

    myGV.setAdapter(adapter);

现在的问题是只填充了第一行和前两列,我想要像 forst 行 (2011-10-27 , 5 , 6 ) 和第二行 (2011-10-26 , 3 , 2 ) 这样的数据但我得到的只是像(2011-10-27、2011-10-26)这样的前排。

这可以在 GridView 中修复吗?

【问题讨论】:

    标签: android sqlite gridview listadapter simplecursoradapter


    【解决方案1】:

    对于您的问题,请看这里,Binding to Data with AdapterView

    注意:下面的描述只是如何将光标绑定到适配器的示例。

    用数据填充布局

    向布局中插入数据通常是通过将 AdapterView 类绑定到适配器来完成的,该适配器从外部源检索数据(可能是代码提供的列表或从设备数据库查询结果)。

    以下代码示例执行以下操作:

    1.使用现有视图创建一个 Spinner,并将其绑定到一个新的 ArrayAdapter,该 ArrayAdapter 从本地资源中读取一组颜色。

    2. 从 View 创建另一个 Spinner 对象并将其绑定到新的 SimpleCursorAdapter,该对象将从设备联系人中读取人员姓名(请参阅 Contacts.People)。

     // Get a Spinner and bind it to an ArrayAdapter that 
    
     // references a String array.
    
    Spinner s1 = (Spinner) findViewById(R.id.spinner1);
    
    ArrayAdapter adapter = ArrayAdapter.createFromResource(    this, R.array.colors,
     android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    
    s1.setAdapter(adapter);
    
    // Load a Spinner and bind it to a data query.
    private static String[] PROJECTION = new String[] { People._ID, People.NAME};
    
    Spinner s2 = (Spinner) findViewById(R.id.spinner2);
    Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null);
    
    SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item,cur,new String[] {People.NAME}, new int[] {android.R.id.text1});
    
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s2.setAdapter(adapter2);
    

    请注意,投影中的 People._ID 列必须与 CursorAdapter 一起使用,否则会出现异常。

    如果在应用程序的生命周期中更改了适配器读取的底层数据,则应调用 notifyDataSetChanged()。这将通知附加的视图数据已更改,它应该自行刷新。

    更多信息请看这里,

    Custom CursorAdapters.

    谢谢。

    【讨论】:

      【解决方案2】:

      创建一个包含 textViews 的新布局。找到如下代码第一行所示的布局,并将您的数据附加到 listView。 ListView 加载包含 textView 的布局。

      private void populateGrid()
      {
      
          ListView lv = (ListView)findViewById(R.id.listView1);
      
          Cursor c = dbHelper.fetchAllScores();
          startManagingCursor(cursor);
      
          String[] cols = new String[] { TodoDbAdapter.KEY_PLAYDATE, TodoDbAdapter.KEY_NUMVALA, TodoDbAdapter.KEY_NUMVALB};
          int[]   views = new int[] { R.id.txt_date, R.id.txt_no, R.id.txt_yes};
      
          // Now create an array adapter and set it to display using our row
          SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
                  R.layout.listviewtemp, c, cols, views);
      
          Log.w("NumRows",adapter.getCount() + "");
      
          lv.setAdapter(adapter);
      
      }
      

      R.layout.listviewtemp 是 listView 模板布局(单独的 xml),lv 是在 mainlayout.xml 中找到的 listview。

      public Cursor fetchAllScores() {
          return database.query(DATABASE_TABLE, new String[] { KEY_ROWID,
                  KEY_PLAYDATE, KEY_NUMVALA, KEY_NUMVALB }, null, null, null,
                  null, null);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-02-17
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 2018-09-16
        • 2010-09-18
        相关资源
        最近更新 更多