我有两个片段和第一个片段我有两个页面,每个页面至少有两个带问题的单选按钮,这些单选按钮用于选择你的答案。
目前我必须使用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
这是另一个原因我正在寻求另一个更容易结果
提前致谢。
答案 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中。