我有 5 个问题。每个片段都有一个带有 4 个单选按钮的问题。每个单选按钮都有一个 1-4 之间的标签。在第 5 个片段中,它有一个提交按钮,所有单选按钮应加起来并显示在新活动的总计上。但是,每当我单击“提交”时,总数始终为 5(片段 1-4 不相加。我需要在片段 1-4 上添加什么,以便这些值可以添加并显示在总数中。
package com.example.act.Fragments;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import com.example.act.R;
import com.example.act.ResultActivity;
public class Q5Fragment extends Fragment {
private RadioGroup radioGroup;
private Button btnSubmit;
private int total = 0; // Initialize total to 0
public Q5Fragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_q5, container, false);
radioGroup = view.findViewById(R.id.radioGroup);
btnSubmit = view.findViewById(R.id.btnSubmit);
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < radioGroup.getChildCount(); i++) {
RadioButton radioButton = (RadioButton) radioGroup.getChildAt(i);
if (radioButton.isChecked()) {
int selectedValue = Integer.parseInt(radioButton.getTag().toString());
total += selectedValue;
}
}
Intent intent = new Intent(getActivity(), ResultActivity.class);
intent.putExtra("totalValue", total);
startActivity(intent);
}
});
return view;
}
public void receiveFragmentValue(int selectedValue) {
total += selectedValue;
}
}
一种解决方案是让您的
Q5Fragment
btnSubmit
处理程序调用 Activity
派生类中的某个方法,该方法将进行求和,然后打开结果活动。所以你的提交处理程序看起来像这样:
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((QuestionAware)getActivity()).submitQuestions();
}
});
这需要你声明一个接口:
interface QuestionAware {
void submitQuestions();
}
然后在保存片段的 Activity 中实现它。
现在,在 Activtiy 的
submitQuestions
中,您将从片段中获取所有值。为此,让每个片段都有一个返回其值的方法:
public int getSelectedValue() {
int selectedValue = 0;
for (int i = 0; i < radioGroup.getChildCount(); i++) {
RadioButton radioButton = (RadioButton) radioGroup.getChildAt(i);
if (radioButton.isChecked()) {
selectedValue = Integer.parseInt(radioButton.getTag().toString());
}
}
return selectedValue;
}
然后在
submitQuestions
中对这些值求和并打开新活动:
int total = fragment1.getSelectedValue() + fragment2.getSelectedValue() + fragment3.getSelectedValue() + fragment4.getSelectedValue() + fragment5.getSelectedValue();
Intent intent = new Intent(this, ResultActivity.class);
intent.putExtra("totalValue", total);
startActivity(intent);