2011-10-26 11 views
1

タイトルからは私が尋ねたいことは少し不明な場合がありますので、説明してください。アンドロイドセーブのダイナミックビューの値

私のプロジェクトでは、whileループで動的なビューを作成する必要があります。そのようです;

private void loadCheckPointQuantity() { 
    final LinearLayout rgLayoutContainer = (LinearLayout)findViewById(R.id.quantityAnswers); 

    _answerCursor.moveToFirst(); 
    while(_answerCursor.isAfterLast() == false) { 

     LinearLayout rgContainer = new LinearLayout(this); 
     rgContainer.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     rgContainer.setOrientation(LinearLayout.HORIZONTAL); 

     final ImageView checked = new ImageView(this); 
     checked.setMinimumHeight(30); 
     checked.setMinimumWidth(30); 
     if(_answerCursor.getInt(CPA_IS_CHECKED_COL) == 1) { 
      checked.setBackgroundResource(R.drawable.btn_check_buttonless_on); 
     } else { 
      checked.setBackgroundResource(R.drawable.ic_delete); 
     } 
     checked.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

     TextView txtAmount = new TextView(this); 
     txtAmount.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     txtAmount.setText((_answerCursor.getPosition() + 1) + "/" + _answerCursor.getCount()); 
     txtAmount.setTextSize(22); 

     RadioGroup rgAnswer = new RadioGroup(this); 
     rgAnswer.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     rgAnswer.setOrientation(RadioGroup.HORIZONTAL); 
     rgAnswer.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
       switch(checkedId) { 
       case 0: 
        checked.setBackgroundResource(R.drawable.ic_delete); 
        break; 
       case 1: 
        checked.setBackgroundResource(R.drawable.btn_check_buttonless_on); 
        break; 
       } 
      } 
     }); 

     RadioButton rbYes = new RadioButton(this); 
     rbYes.setText(R.string.yes); 
     rbYes.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     rbYes.setId(1); 

     RadioButton rbNo = new RadioButton(this); 
     rbNo.setText(R.string.no); 
     rbNo.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     rbNo.setId(0); 

     ImageButton camButton = new ImageButton(this); 
     camButton.setImageResource(R.drawable.ic_menu_camera); 
     camButton.setLayoutParams(new LayoutParams(70, 70)); 

     final EditText txtNote = new EditText(this); 
     txtNote.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     txtNote.setEnabled(false); 
     txtNote.setOnFocusChangeListener(new OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View view, boolean hasFocus) { 
       if(!hasFocus) { 
        txtNote.setSingleLine(true); 
       } else { 
        txtNote.setSingleLine(false); 
       } 
      } 
     }); 

     rgAnswer.addView(rbYes); 
     rgAnswer.addView(rbNo); 
     rgContainer.addView(checked); 
     rgContainer.addView(txtAmount); 
     rgContainer.addView(rgAnswer); 
     rgContainer.addView(camButton); 
     rgContainer.addView(txtNote); 
     rgLayoutContainer.addView(rgContainer); 

     if(_answerCursor.getInt(CPA_ANSWER_COL) == 1) { 
      rbYes.setChecked(true); 
     } else if(_answerCursor.getInt(CPA_ANSWER_COL) == 0) { 
      rbNo.setChecked(true); 
     } 

     if(_answerCursor.getInt(CPA_ANSWER_COL) == 0 || _answerCursor.getInt(CPA_ANSWER_COL) == 1) { 
      txtNote.setEnabled(true); 
     } 
     _answerCursor.moveToNext(); 
    } 
    _answerCursor.moveToFirst(); 
} 

何が起こるかは、ループが交差する回数を決定するフィールドがデータベースにあります。量。したがって、数量が5の場合は、コンポーネントを5回作成する必要があります。

問題は、私はこの方法ですべてのことを行うので、私は個々のビューにアクセスすることができない、

です。 たとえば、現実にはこれが必要です。

ボタンをクリックします。次に、すべての結果をデータベースに保存する必要があります。 EditTextとisCheckedのradiogroupの結果です。

問題は、個々のビューにどのようにアクセスできるかわかりません。 私はこれを解決するためにいくつかのことを考えました。しかし、彼らはすべて私の頭の上に疑問符を作成することになります

回答を表すクラスを作成しようとしました(isChecked、メモなど(ゲッターとセッターを使って)) すべてをarraylistに入れてください。

このArrayListの中で答えを置く。働く。しかし、それは次の問題で私を残しする必要があります。どのようなIAテキストの変更?どのように私はこれを扱うことができますか?

私が観測を使用している場合、私は答えクラスを作成する必要がありますすべてのメンバーに対してsetChanges()を呼び出し、loadCheckPointQuantityを含むクラスでobservableを実装する必要がありますか?

私は観測値を正確に0.4回経験しました。

次のボタンを押したときに最新のデータを保存するにはどうすればよいですか?

それは漠然としたかもしれないので、私は...

絶対に無知午前:

私が達成しようとするどのような:ヘルプは が必要:どのようにデータベース にすべてのビューからの最新のデータを保存でボタンをクリック

あなたがこのポストを読んだり見たり読んだりしていた時間は非常に感謝しています。より高い答え。

もっとコードや説明が必要な場合は、私に知らせて、私はベストを尽くします。

答えて

0

私は私の問題を解決しました。

イベントリスナーをデータベースに格納する必要があるすべてのものに割り当てました。 フォーカスが変更されると、データをデータベースに保存します。だから私は答えを保持するリストは一切持っていない。私はその場でデータベースを更新します。残念ながら、それはパフォーマンスにとって悪いです。幸いなことに、私たちはこのパフォーマンスを享受することができます

このコードを実行して、whileループに3000回実行するように指示しました。時間がかかるビューの生成(平均で約3-4秒)以外にも、すべて正常に動作しました。だから私はメソッドの外に生成されたオブジェクトを追跡する必要はありません。アンドロイド/ javaは私のためにそれを行います。

関連する問題