【问题标题】:How to show the results of the quiz?如何显示测验结果?
【发布时间】:2015-04-21 13:10:45
【问题描述】:

我正在 Android Studio 中创建一个测验。我的 testActivity.java 中有一个寻呼机适配器,其中显示 3 个片段(问题)。当我按下“结束”按钮时,一个名为“Result.java”的新活动开始了。它显示了我有多少正确答案以及我是否通过了测试。我的 Result 活动中有另一个按钮,一旦按下该按钮,应该会打开该人刚刚完成的相同测试,但每个问题下方都有解释。我还希望在显示结果时检查该人在测试期间检查的复选框。我该怎么做?

顺便说一句,我注意到当我按下后退按钮(在我的手机上)时,会打开相同的测试并检查我选择的答案。如果我可以编写一个返回到先前活动的代码并对其进行一些更改(添加一个带有问题解释的文本),它将解决我的问题。

testActivity.java

public class testActivity extends FragmentActivity {

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

    private  void initialisePaging() {
        List<Fragment> fragments = new Vector<Fragment>();
        fragments.add(Fragment.instantiate(this,fragment1.class.getName()));
        fragments.add(Fragment.instantiate(this,fragment2.class.getName()));
        fragments.add(Fragment.instantiate(this,fragment3.class.getName()));
        PagerAdapter mPagerAdapter = new PagerAdapter(this.getSupportFragmentManager(), fragments);

        ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
        pager.setAdapter(mPagerAdapter);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_test, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

}

PagerAdapter.java

public class PagerAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragments;

    public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int arg0) {
        return this.fragments.get(arg0);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }

    public void setFragments(List<Fragment> fragments) {
        this.fragments = fragments;
    }
}

Result.java

public class Result extends ActionBarActivity {

    TextView win_lose, percent, correctAnswers;
    int Ans1, Ans2, Ans3, percentAns;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_result);
        calculateResult();
    }

    private void calculateResult() {
        win_lose = (TextView)findViewById(R.id.textView9);
        percent = (TextView)findViewById(R.id.textView10);
        correctAnswers = (TextView)findViewById(R.id.textView7);

        final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);

        int Ans1 = app_preferences.getInt("answer_value1", 0);
        int Ans2 = app_preferences.getInt("answer_value2", 0);
        int Ans3 = app_preferences.getInt("answer_value3", 0);
        float AnsNum = Ats1+Ats2+Ats3;

        float percentAns = (AnsNum * 100.0f) / 9;
        int correctAns = 0;

        if (Ans1 == 1){correctAns++;};
        if (Ans2 == 1){correctAns++;};
        if (Ans3 == 1){correctAns++;};

        if ( percentAns >= 70 ){
            win_lose.setText("Win");
            percent.setText(String.valueOf(percentAns)+" %");
            percent.setTextColor(Color.parseColor("#FF1DD710"));
            correctAnswers.setText(String.valueOf(correctAns)+"/9");
        } else {
            win_lose.setText("Lose");
            percent.setText(String.valueOf(percentAns)+" %");
            percent.setTextColor(Color.RED);
            correctAnswers.setText(String.valueOf(correctAns)+"/9");
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_result, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

【问题讨论】:

    标签: java android android-fragments android-activity


    【解决方案1】:

    架构应该是这样的: 测试活动父; QuizFragment、ResultFragment 和 AnswersFragment。

    我不会在一个片段中设计测验和答案作业,因为每个片段都应该负责一项作业,我也不希望用户界面如此相似。

    它们都应该由 TestActivity 管理。您可以使用包含每个问题的布尔数组的映射,并通过 TestActivity 将其传递给 AnswersFragment。

    【讨论】:

      【解决方案2】:

      我建议您使用一个包含问题、选项、正确答案和用户随时间进行的测试的数据库,这样它就可以从特定日期加载,它也可以具有历史和你可以做一些关于正确/错误答案、平均分数等的统计图表。所以当启动应用程序时,总是重新开始,如果你需要显示结果,只需从表中选择日期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多