2012-07-25 68 views
2

刚开始学习如何为Android编程,现在我陷入了一些疑虑。ListView上的Android SQLite查询结果

我有一个SQLite数据库与多个表和每个表与一些字段。

我创建了一个类来管理我的数据库和想象的功能之一是这样的:

public Cursor getGroupData() { 
    String[] values = new String[] {_ROWID, _NAME, _AGE, _PHONE}; 
    Cursor c = db.query(BD_TABLE, values, null, null, null, null, null); 
    return c; 
} 

现在我有两种情况之一。

第一种情况

要展示,例如,所有的名字返回我在ListView查询。就这样,用户可以在一个名字点击和新的活动将展示(想象一个布局,所有的用户信息)

第二种情况

要展示,例如,所有的名字返回上我的查询在ListView中。这样,用户可以点击一个名字,并且将执行一个新的查询(想象一下从该用户那里获得其他数据)。查询将导致返回各种数据,而我又想在ListView中显示一些字段(例如地址)。现在,如果用户点击地址,将显示一个新的活动(例如一个包含地址信息的布局)。

在这两种情况下,虽然我只是选择一个名称或地址,但SQLite返回的所有数据都必须可用,例如,在第一种情况下,我选择一个名称,它将显示在布局,就像联系信息一样,但查询,年龄和电话的结果也必须可用。

现在我在做这样的事情:

Cursor values = db.getGroupData(); 
// Now I'm thinking in putting some code to iterate over the cursor and put what I want to display on my listview on a string array 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values_I_what_to_show); 
setListAdapter(adapter); 

这样做的问题是,我把一个字符串数组上的数据,但需要查询返回的所有数据。

你能指点一下吗?

问候,

+1

我将建议使用[CursorAdapter的](HTTP: //developer.android.com/reference/and roid/widget/CursorAdapter.html)而不是ArrayAdapter – Vladimir 2012-07-25 09:41:54

+0

是不是不推荐?试图理解CursorLoader,但没有能力 – Favolas 2012-07-25 09:50:19

回答

5

尝试这种情况:

Cursor cursor =db.getGroupData(); 
ArrayList<MyData> listData = new ArrayList<MyData>(); 
while (cursor.moveToNext()) { 
     MyData temp = new MyData(); 
     temp.id = cursor.getInt(0); 
     temp.name = cursor.getString(1); 
     temp.age= cursor.getInt(2); 
     temp.phone= cursor.getInt(3); 
     listData .add(temp); 
        temp =null; 
    } 
cursor.close(); 
MyAdapter myAdapter = new MyAdapter(this, 
      R.layout.list_item, listData); //use custom adapter 
listView.setAdapter(myAdapter); 

声明迈德特类:

private class MyData{ 
    int id ; 
    String name; 
    int age; 
    int phone; 
} 

MyAdapter类:

private class MyAdapter extends ArrayAdapter<projData> { 
    private ArrayList<MyData> items; 
    private Context context; 

    public MyAdapter(Context context, int textViewResourceId, 
      ArrayList<MyData> items) { 
     super(context, textViewResourceId, items); 
     this.context = context; 
     this.items = items; 
     } 

    public View getView(final int position, View convertView, 
      ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.list_item, null); 
     } 
    //here getview code as per ur req 
     } 
    return view; 
    } 
} 
+0

谢谢,但不明白什么是MyAdapter。它在哪里定义? – Favolas 2012-07-26 09:35:16

+0

我已更新代码 – Archana 2012-07-27 04:35:52

+0

谢谢。以其他方式管理,但将在未来有用 – Favolas 2012-07-27 13:38:08