Android在Eclipse中将SQLite绑定到GridView

时间:2011-10-28 09:08:05

标签: android sqlite gridview listadapter simplecursoradapter

我已经制作了以下代码来从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 row(2011-10-27,5,6)和第二行一样的数据(2011-10-26,3,2)但我得到的只是最喜欢排(2011-10-27,2011-10-26)。

可以在GridView中修复吗?

2 个答案:

答案 0 :(得分:0)

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

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

使用数据填充布局

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

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

1.使用现有View创建一个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()。这将通知附加的View数据已被更改,并且应该自行刷新。

有关详细信息,请查看

Custom CursorAdapters

感谢。

答案 1 :(得分:0)

制作包含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);
}