0

Java/Android 開発は初めてです。ビューフリッパー内で質問/回答を動的に構築しているため、各フリップにはいくつかの回答を持つ新しい質問があります。現在、私の XML ファイルにはフリッパービューがあります。以下のコードは、X 個の [[radiogroup と [4 つの無線要素]] を持つ linearlayout] を構築します。私の質問は、フリッパーの「現在の」表示ウィンドウに基づいて、選択したラジオボタンを取得するにはどうすればよいですか?

for (DataQuizQuiz quiz_question : PLT.dataQuiz.getQuiz_data()) {
    LinearLayout ll = new LinearLayout(this);
    ll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                        LayoutParams.FILL_PARENT));
    ll.setOrientation(LinearLayout.VERTICAL);
    RadioGroup rg = new RadioGroup(this);

    TextView tv_answer = new TextView(this);
    tv_answer.setText("Question: " + quiz_question.getQuestion());
    ll.addView(tv_answer);

    for (DataQuizAnswers answer : quiz_question.getAnswers()) {
        RadioButton rb = new RadioButton(this);
        rb.setText(answer.getAnswer());
        rg.addView(rb);
    }

    ll.addView(rg);
    vf_quiz_data.addView(ll);
}

私が知っているvf_quiz_data.getCurrentView()のは だけですが、その中の要素を参照する方法がわかりません.idがなく、オンザフライで作成されるためです。コードはレイアウトを構築するために機能します。その中のデータを参照する方法がわかりません。助けてくれてありがとう。

更新: 可視ビューでラジオ グループをターゲットにする方法を思いつきましたが、もっと良い方法が必要だと思います。ラジオ グループにカウンター 0,1,2 などの ID を割り当てました。これは、ループし、これを使用してラジオ グループ要素をキャプチャするためです。

int selected = (int) ((RadioGroup)
vf_quiz_data.getCurrentView().findViewById(
    vf_quiz_data.getDisplayedChild())).getCheckedRadioButtonId();
RadioButton b = (RadioButton) findViewById(selected);
Log.v("DEBUG",(String) b.getText());

また、カウンターに基づいてIDを割り当てることがどれほど安全かはわかりません。誰かがこれを行う別の方法を持っている場合は、私に知らせてください。

4

1 に答える 1

0

友人から、vf_quiz_data.getCurrentView()を使用して自分のメソッドからデータにアクセスできるように、データのカスタムビューを作成するように言われました。試行錯誤の末、テスト例が機能しました。私のカスタムクラスは「ViewQuiz」と呼ばれ、クラスがビューに追加したエディットテキストの値を返す「getName()」というメソッドを追加しました。私はこのようにそれを取得することができました:(ViewQuiz) vf_quiz_data.getCurrentView()).getName()。私のクラスはlinearlayoutを拡張し、その中にedittextを出力し、ループ内にクラスの新しいインスタンスを作成し、それをaddViewを使用してviewflipperに追加しました。これが他の誰かに役立つ場合の例は次のとおりです。

public class ViewQuiz extends LinearLayout {

public EditText name;

public ViewQuiz(Context context, AttributeSet attrs) {
    super(context, attrs);

    name = new EditText(context);

    name.setText("This is a test");
    addView(name);
}

public ViewQuiz(Context context) {
    super(context);
    name = new EditText(context);
    name.setText("This is a test");
    addView(name);
}

public String getName() {
    return name.getText().toString();

}

}

ViewQuiz test;
for (loop stuff here) {
        test = new ViewQuiz(this);
        test.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        // vf_quiz_data = (ViewFlipper) findViewById(R.id.vf_quiz_data);
        vf_quiz_data.addView(test);
}

// get text from visible view
(ViewQuiz) vf_quiz_data.getCurrentView()).getName()
于 2012-05-10T22:40:10.887 に答える