有更简单的方法吗? radiogroups / buttons - android

时间:2013-10-29 08:43:37

标签: android fragment

我有两个片段和第一个片段我有两个页面,每个页面至少有两个带问题的单选按钮,这些单选按钮用于选择你的答案。 目前我必须使用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;
            }
        });

    }

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

E.g。如果Q1我把它弄好了,那么当我去显示结果时我错了,我会得1/2这是好的但如果我回到Q1并且故意点击错误答案然后回去显示结果,它'll仍然显示1/2而不是0/2,这意味着如果将1设置为变量,那么它将保持在那里。我知道如果我使用setOnclickListener然后我可以设置另一个radioButtons == 0但这意味着在每个if语句中会有很多setonClickListner这是另一个原因我正在寻求另一个更容易结果

提前致谢。

1 个答案:

答案 0 :(得分: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中。