0

我有一个包含 8 个单选按钮的 4 个活动的简单表单。当一个活动被回答时,它会进入下一个活动,我希望在第四个活动中显示选中的单选按钮的结果。有人可以帮我为单选按钮添加值并计算答案吗?我想创建一个心理测试,每个单选按钮必须有不同的值。将它们相加将产生独特的心理特征。这是我的应用程序中的一个布局和活动。我是新手,我很感激我能得到的所有帮助。谢谢!

布局:

    <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

尝试在每个活动中创建一个静态变量并在您的最终活动中访问它们。这是一种方法。

于 2013-04-03T05:12:23.653 回答
0

这似乎是错误的方法,如果您有 20 个问题,您将开始 20 个活动。

您可能可以通过一项活动侥幸逃脱。这应该使您走上正确的道路(尽管它不完整且幼稚)。

制作一个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-最简单的方法是仅使用一个活动,4个线性布局,每个问题一个,将其排成一行并更改其可见性。在第四个结束时,您可以毫无问题地求和。

2-另一种选择是使用活动。当用户完成每个问题组时,您必须为下一个活动添加一个意图,传递 Bundle 中的单选按钮值,如果没有,您将丢失此值,因为您无法访问其他活动值(您应该传递它作为捆绑包,或将其保存在数据库、sharedPreferences 或存储系统中...

3 - 这两个解决方案之间有一个 hibryd,使用 Fragments,但我建议您使用第一个解决方案。

于 2013-04-03T05:30:21.267 回答