2012-02-06 4 views
0

Пытается использовать цикл, чтобы установить текст из 12 флажков из запроса db. Хотелось бы заменить «add1» на значение массива и процитировать все 12 вместо написания каждого из них. Любые идеи о том, как это сделать?Android App- Использование цикла для процедуры 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

Пожалуйста, обратите внимание: все ниже от верхней части моей головы, я не могу проверить это прямо сейчас. Я проверю его позже, когда у меня появится шанс.

Я думаю, что вам нужно отслеживать, какие колонки, чтобы связать с каждым CheckBox ... Я предполагаю, что это что-то вроде этого:

Колонка: add1 => Checkbox: 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

+0

Я рассмотрю другой способ, которым вы можете это сделать в ближайшее время, но вам нужно будет хранить массив столбцов (если альтернативный метод, о котором я думаю, будет работать.) – joshhendo

+0

У вас уже есть один для имен столбцов и для имени флажка. –

0

Понял! Забыл, что я имел дело с объектами, а также понял, что мне нужен третий массив. Вот что я придумал.

  • CList содержит имена столбцов
  • являются п-списка объектов (в данном случае чекбоксы)
  • 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]))); 
        } 
    } 
    

Устанавливает текст CheckBox (имя столбца - Value)

Смежные вопросы