![](/img/trans.png)
[英]Android: Populating ListView from SQLite database (multiple columns)
[英]multiple columns listview from Sqlite DB android
我正在使用一個包含三個表的數據庫,學生,答案,問題答案表包含了Studentid,questionid,answer我使用這三個表在SQLITE中構建了一個數據庫,因此在加載應用程序時,我將設置學生並檢查答案。 問題在於從該表中獲取歷史記錄,在ListView中,我之前使用過適配器,但是在僅從表中直接顯示信息之前這很容易,但是對於表答案,我必須獲取Studentid並顯示名稱,獲取questionid並顯示問題本身。 適配器不起作用,因為該類沒有我想要顯示的東西,所以我制作了一種方法,可以為我提供所需的信息:
public ArrayList getTableHisto() {
ArrayList lst = new ArrayList();
int zise = lst.size();
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery(" SELECT Q." + KEY_QUESTION + " , U." + KEY_NOM + " , U." + KEY_PRENOM + " , A." + KEY_DATE + " , " + KEY_REPONSE + " from " + TABLE_QUESTION + " Q, " + TABLE_USER + " U, " + TABLE_ANSWER + " A WHERE Q." + KEY_ID_QUESTION + " = A." + KEY_ID_QUESTION + "AND A." + KEY_MATRICULE + " = U." + KEY_MATRICULE, null);
if (c.moveToFirst()) {
while (c.isAfterLast() == false) {
String nom = c.getString(c.getColumnIndex(KEY_NOM)).toString();
// String prenom = c.getString(c.getColumnIndex(KEY_PRENOM)).toString();
String quest = c.getString(c.getColumnIndex(KEY_QUESTION)).toString();
String reponse = c.getString(c.getColumnIndex(KEY_REPONSE)).toString();
String date = c.getString(c.getColumnIndex(KEY_DATE)).toString();
lst.add(nom);
// lst.add(prenom);
lst.add(quest);
lst.add(reponse);
lst.add(date);
c.moveToNext();
}
}
return lst;
}
我認為這是可行的,因為我嘗試了sql查詢,但是問題是要使其適應於histrow.java中具有四列的ListView:
<LinearLayout
android:layout_width="368dp"
android:layout_height="495dp"
android:orientation="horizontal"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp">
<TextView
android:id="@+id/hname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="nom" />
<TextView
android:id="@+id/hquest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="ques" />
<TextView
android:id="@+id/hrep"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="rep" />
<TextView
android:id="@+id/hdate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="date" />
</LinearLayout>
歷史記錄頁面上只有ID為List的ListView:hist如果有人有任何想法,請不要猶豫。 謝謝
您需要使用定制的適配器或使用CursorAdapter,后者可能是最簡單的,因為他們不需要對其進行定制。
如果您使用CursorAdapter,則不是直接從提取的Cursor中構建ArrayList,而是直接使用Cursor。
你可以有 :-
public Cursor getTableHistoAsCursor() {
SQLiteDatabase db = this.getReadableDatabase();
return db.rawQuery(" SELECT Q." + KEY_QUESTION + " , U." + KEY_NOM + " , U." + KEY_PRENOM + " , A." + KEY_DATE + " , " + KEY_REPONSE + " from " + TABLE_QUESTION + " Q, " + TABLE_USER + " U, " + TABLE_ANSWER + " A WHERE Q." + KEY_ID_QUESTION + " = A." + KEY_ID_QUESTION + "AND A." + KEY_MATRICULE + " = U." + KEY_MATRICULE, null);
}
各自的活動可以是:
public class MainActivity extends AppCompatActivity {
DatabaseHelper mDBHlpr; //<<<< Note 1
SimpleCursorAdapter mSCA;
Cursor mCsr;
ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //<<<< Note 2
mListView = (ListView) findViewById(R.id.yourlistview); //<<<< Note 3
mDBHlpr = new DatabaseHelper(this); //<<<< Note 1
mCsr = mDBHlpr.getTableHistoAsCursor();
mSCA = new SimpleCursorAdapter(this,
R.layout.yourlayout, //<<<< Note 2
new String[]{KEY_NOM, KEY_QUESTION, KEY_REPONSE, KEY_DATE}, //<<<< Note 4
new int[]{R.id.hname, R.id.hquest, R.id.hrep, R.id.hdate}, //<<<< Note 5
0
);
mListView.setAdapter(mSCA);
}
KEY_NOM
, KEY_QUESTION
等進行進一步限定,例如DatabaseHelper.KEY_NOM
(注1),或更改為使用硬編碼的字符串,例如"name"
, "question"
等,具體取決於定義方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.