2012-02-06 53 views
0

嘗試使用循環來設置數據庫查詢中12個複選框的文本。想用數組值替換「add1」,並循環遍歷全部12個,而不是拼出每一個。任何想法如何做到這一點?Android應用程序 - 使用循環setText過程來填充EditText

這裏是我試圖修改代碼:

add1Text= (CheckBox) findViewById(R.id.add1); 
if (cursor.getString(cursor.getColumnIndex("add1")) == null) { 
    add1Text.setVisibility(View.GONE); 
} 
else { 
    add1Text.setText(cursor.getString(cursor.getColumnIndex("add1"))); 
} 

回答

1

請注意:下面的一切都是從我的頭頂,我現在不能測試它。稍後當我有機會的時候我會測試它。

我想你會需要跟蹤的哪一列與每個複選框關聯......我假定它是這樣的:

柱:ADD1 =>複選框:add1Text 柱:ADD2 =>複選框:add2Text 等等等等。

在這種情況下,您需要手動跟蹤它們,可能在數組中。我建議製作一個可以使用的Pair類。我從這篇文章[A Java collection of value pairs? (tuples?)]

public class Pair<L,R> { 

    private final L left; 
    private final R right; 

    public Pair(L left, R right) { 
    this.left = left; 
    this.right = right; 
    } 

    public L getLeft() { return left; } 
    public R getRight() { return right; } 

    @Override 
    public int hashCode() { return left.hashCode()^right.hashCode(); } 

    @Override 
    public boolean equals(Object o) { 
    if (o == null) return false; 
    if (!(o instanceof Pair)) return false; 
    Pair pairo = (Pair) o; 
    return this.left.equals(pairo.getLeft()) && 
      this.right.equals(pairo.getRight()); 
    } 

} 

改變了類現在,你需要做一個列表(或類似)包含所需的對。

List<Pair<CheckBox, String>> list = new ArrayList<Pair<CheckBox, String>>; 
list.add(new Pair<CheckBox, String>((CheckBox) findViewById(R.id.add1), "add1"); 
list.add(new Pair<CheckBox, String>((CheckBox) findViewById(R.id.add2), "add2"); 
list.add(new Pair<CheckBox, String>((CheckBox) findViewById(R.id.add3), "add3"); 

等等等等

然後你就可以通過列表使用的東西像迭代

foreach (Pair<CheckBox, String> item in list) 
{ 
    if (cursor.getString(cursor.getColumnIndex(item.getLeft()) == null) 
    { 
     item.getRight().setVisibility(View.GONE); 
    } 
    else 
    { 
     item.getRight().setText(cursor.getString(cursor.getColumnIndex(item.getLeft())); 
    } 
} 
+0

所期待的東西一點點更緊湊。例如:'code'for(int i = 0; i 2012-02-06 05:24:37

+0

我會研究另一種可以很快完成的方法,但是您需要存儲一列數組(如果我想到的替代方法可行)。 – joshhendo 2012-02-06 05:26:43

+0

已經有一個用於列名稱的列爲複選框名稱。 – 2012-02-06 05:27:32

0

明白了!忘記了我正在處理對象,並意識到我需要第三個數組。這是我想出來的。

  • 欄列表包含列名
  • FLIST是對象(在這種情況下的CheckBox)
  • 的plist是我從佈局選擇對象的名稱。

    Object fList[]={add1Text,add2Text,add3Text}; 
    int pList[]={R.id.add1,R.id.add2,R.id.add3}; 
    cList = cursor.getColumnNames(); 
    
    for (int i =0; i < fList.length; i++){ 
        fList[i] = (CheckBox) findViewById(pList[i]); 
        if (cursor.getString(cursor.getColumnIndex(cList[i])) == null) { 
         ((TextView) fList[i]).setVisibility(View.GONE); 
        } 
        else { 
         ((TextView) fList[i]).setText(cList[i] + " - " + cursor.getString(cursor.getColumnIndex(cList[i]))); 
        } 
    } 
    

設置複選框文本(列名 - 值)