0

8 つのラジオ ボタンを含む 4 つのアクティビティを含む単純なフォームがあります。1 つのアクティビティが回答されると、次のアクティビティに進みます。4 番目のアクティビティで、ラジオ ボタンをオンにした結果を表示したいと考えています。ラジオボタンに値を追加して答えを計算するのを手伝ってくれる人はいますか? 心理テストを作成したいのですが、すべてのラジオボタンに異なる値を設定する必要があります。それらを合計すると、独自の心理的プロファイルが得られます。これは、私のアプリケーションの 1 つのレイアウトとアクティビティです。私はこれに不慣れで、私が得ることができるすべての助けに感謝します. ありがとうございました!

レイアウト:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>


<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/question_1"/>

<RadioGroup 
android:id="@+id/radiogroup"    
android:layout_width="fill_parent" 
android:layout_height="fill_parent">

<RadioButton
android:id="@+id/radiobutton1"  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/radio_1"/>

<RadioButton
android:id="@+id/radiobutton2"  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/radio_2"/>
</RadioGroup>  

</LinearLayout>

アクティビティ:

package com.example.app_test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioButton;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

      RadioButton buttonOne = (RadioButton)findViewById(R.id.radiobutton1);

        buttonOne.setOnCheckedChangeListener(new OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                if (isChecked)
                {
                    //Go to the activity for button 1 here
                    MainActivity.this.startActivity(new Intent(MainActivity.this, SecondActivity.class));
                }
            }
        });

        RadioButton buttonTwo = (RadioButton)findViewById(R.id.radiobutton2);

        buttonTwo.setOnCheckedChangeListener(new OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                if (isChecked)
                {
                    //Go to the activity for button 2 here
                    MainActivity.this.startActivity(new Intent(MainActivity.this, SecondActivity.class));
                }
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
4

3 に答える 3

0

いくつかのオプションがあります。

1- 最も簡単な方法は、アクティビティを 1 つだけ使用することに基づいています。4回目の終わりには、問題なく合計できます。

2- 別のオプションは、アクティビティを使用することです。ユーザーがすべての質問グループを終了したら、バンドル内のラジオ ボタンの値を渡す次のアクティビティにインテントをスター付けする必要があります。そうしないと、他のアクティビティの値にアクセスできないため、この値が失われます (渡す必要があります)。バンドルとして、またはデータベース、sharedPreferences、またはストレージ システムに保存します...

3 - Fragments を使用したこの 2 つのソリューションには混同性がありますが、最初のソリューションを使用することをお勧めします。

于 2013-04-03T05:30:21.267 に答える
0

これは間違ったアプローチのように思えます。20 個の質問がある場合、20 個のアクティビティを開始することになります。

あなたはおそらく1つの活動で逃げることができます. これにより、正しい道に進むはずです(不完全で素朴ですが)。

QuestionActivityのようなレイアウトの を作成します (以下の疑似コード):

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:id="@+id/question_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <RadioGroup
        android:id="@+id/answer_group"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <RadioButton
            android:id="@+id/answer1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
        ...
     </RadioGroup>
</LinearLayout>

次に、あなたQuestionActivityには次のようなものがあります:

public class QuestionActivity extends Activity {

    private int[] answers = new int[MAX_QUESTIONS];
    private int currentQuestionIndex = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RadioGroup answerGroup = (RadioGroup)findViewById(R.id.answer_group);

        answerGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId)
            {
                answers[currentQuestionIndex] = checkedId;
                QuestionActivity.this.loadQuestionAtIndex(++currentQuestionIndex);
            }
        });

    private void loadQuestionAtIndex(int index) {
        if (index == MAX_QUESTIONS) {
            computeResults(); // this method would traverse the answers array to tally the results (based on an answer key, or similar)
            return;
         }
        // get the question text from an array resource or some other data source
        // update the question text and radio buttons text
    }
}  

それがあなたを正しい方向に導くことを願っています。質問にテキスト以外の対話性が必要な場合 (つまり、一部の質問で動画が表示される場合)、Fragmentクラス ( http://developer.android.com/guide/components/fragments.html ) を使用して再利用可能な UI を作成し、ビジネス ロジック (VideoQuestionFragment、TextQuestionFragment など)。

于 2013-04-03T05:42:40.260 に答える
0

すべてのアクティビティで静的変数を作成し、最終的なアクティビティでそれらにアクセスしてみてください。これが 1 つの方法です。

于 2013-04-03T05:12:23.653 に答える