2

Android向けのプログラミング方法を学び始めたばかりですが、今はいくつかの疑問に悩まされています。

複数のテーブルを持つ1つのSQLiteデータベースと、いくつかのフィールドを持つ各テーブルがあります。

データベースを管理するためのクラスを作成し、関数の1つが次のようなものであると想像しました。

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;
}

今、私は2つの状況のうちの1つを持っています。

最初の状況

たとえば、クエリで返されたすべての名前をListViewに表示したいとします。これにより、ユーザーは名前をクリックすると、新しいアクティビティが表示されます(すべてのユーザー情報を含むレイアウトを想像してください)

2番目の状況

たとえば、クエリで返されたすべての名前を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);

これに伴う問題は、データを文字列配列に配置しているが、クエリによって返されるすべてのデータが必要になることです。

私をある方向に向けてもらえますか?

よろしく、

4

1 に答える 1

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);

MyDataクラスを宣言します:

  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;
    }
}
于 2012-07-25T09:41:43.340 に答える