Android Fragments 如何从不同的片段中添加单选按钮

1zmg4dgp  于 9个月前  发布在  Android
关注(0)|答案(1)|浏览(87)

我有五个问题。每个片段都有一个带有4个单选按钮的问题。每个单选按钮都有一个介于1-4之间的标记。在第5个片段中,它有一个提交按钮,所有的单选按钮应该加起来并显示在一个新活动的总数上。然而,每当我点击提交时,总数总是5(片段1-4不加起来。我需要在片段1-4上添加什么,以便值可以相加并显示在总数上。
image

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;
    }
}
a6b3iqyw

a6b3iqyw1#

一种解决方案是让Q5FragmentbtnSubmit处理程序调用Activity派生类中的某个方法,该方法将执行求和,然后打开结果活动。所以你的提交处理器看起来像这样:

btnSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((QuestionAware)getActivity()).submitQuestions();
            }
        });

这需要您声明一个接口:

interface QuestionAware {
   void submitQuestions();
 }

然后在保存片段的Activity中实现它。
现在,在Activity的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中对这些值求和并打开新Activity:

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);

相关问题