0

我有两个片段,第一个片段有两个页面,每个页面至少有两个带有问题的单选按钮,这些单选按钮用于选择您的答案。目前,我必须使用 if else 功能并使用setText设置单选按钮的问题和答案,当单击正确答案时,在您转到最后一页并单击显示结果之前,什么都不会显示。现在我必须继续使用 if else 并setOnClickListener为所有这些使用。此外,通过使用setOnClickListener它会向我的结果页面的变量发送 +1 结果。

有没有更简单的方法来做到这一点?

这就是我的代码的样子

    if(fragmentNumber == 0)
    {
        ask_question.setText("Question1?");
        rb1.setText("Answer1");
        rb2.setText("Answer2");
        rb1.setOnClickListener(new android.view.View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ResultsFragment.Q1 = 1;
            }
        });
    }
    else if(fragmentNumber == 1)
    {
        ask_question.setText("Question2?");
        rb1.setText("Answer2-1");
        rb2.setText("Answer2-2");
        rb2.setOnClickListener(new android.view.View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ResultsFragment.Q2 = 1;
            }
        });

    }

除了寻找更简单的方法之外,我还遇到了另一个问题。让我举个例子。

例如,如果 Q1 我做对了,而 Q2 我做错了,当我去显示结果时,我会得到 1/2,这很好,但如果我回到 Q1 并故意点击错误的答案,然后返回显示结果,它仍然会显示 1/2 而不是 0/2,这意味着如果将 1 设置到变量中,那么它将保留在那里。我知道如果我使用setOnclickListenerthen 我可以设置另一个radioButtons == 0,但这意味着在每个 if 语句中都会有很多setonClickListner,这是我寻求另一个更简单结果的另一个原因。

提前致谢。

4

1 回答 1

1

寻找更简单的方法?好的。在我看来,您应该有一个片段(自定义QAFragment),其中只有一页用于问题和答案。

public class QuestionFragment extends Fragment {

    public static QuestionFragment newInstance(String questionText, String[] answerArray) {
        QuestionFragment f = new QuestionFragment();

        Bundle args = new Bundle();
        args.putString("questionText", questionText);
        args.putStringArray("answerArray", answerArray);

        f.setArguments(args);

        return f;
    }

    public String getQuestionText() {
        return getArguments().getString("questionText");
    }

    public String[] getAnswerArray() {
        return getArguments().getStringArray("answerArray");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View content = null;
        // TODO: inflate your content here, put your radios and question text

        final String questionText = getQuestionText();
        String[] answerArray = getAnswerArray();

        // TODO: set your question text with questionText value
        // TODO: set your asnwers with answerArray values

        RadioGroup radioGroup = null;
        // TODO: keep your radios with this radioGroup

        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int radioButtonID) {
                String selectedAnswer = null;
                // TODO: if/else or switch statement on radioButtonId to get the selected answer

                            // Post the result to main activity to do extra operations or open new page.
                ((MainActivity)getActivity()).postQAResult(questionText, selectedAnswer);
            }
        });

        return content;
    }
}

向您的主要活动添加postQAResult方法以侦听来自片段的回调。

public void postQAResult(String question, String asnwer) {
    // TODO: handle answer for the question. 
    // For example if you need to store answer you can use SharedPreferences to save. 
    // Or you can ask different questions for given answer.
}

现在,当您需要新的问题/答案页面时,您可以从您的活动中添加此 qa 片段。例如;

    String questionText = "Any problem?";
    String[] answerArray = new String[]{"Yes","No"};
    QuestionFragment questionFragment = QuestionFragment.newInstance(questionText, answerArray);

    getFragmentManager().beginTransaction().add(android.R.id.content, questionFragment, "UNIQUE_TAG_FOR_YOUR_PAGE").commit();

您可能需要向用户显示上一个问题。然后不要删除您的 qa 片段并在添加它们时将它们放入 backstack。

于 2013-10-29T09:24:21.993 回答