android viewmodel,无法设置值

android viewmodel,无法设置值,android,android-fragments,radio-button,viewmodel,Android,Android Fragments,Radio Button,Viewmodel,基于viewmodel中的单选按钮设置字符串值时遇到问题。我只想让用户根据单击的内容进行选择,并将其发送到视图模型 当我尝试记录该值时,它只是保持空白 我看到了一些答案,但没有一个对我的处境有帮助 我尝试设置它的片段: public class TJPageOne extends Fragment { private TJViewModel tjViewModel; private EditText placeInput, peopleInput; private Ra

基于viewmodel中的单选按钮设置字符串值时遇到问题。我只想让用户根据单击的内容进行选择,并将其发送到视图模型 当我尝试记录该值时,它只是保持空白

我看到了一些答案,但没有一个对我的处境有帮助

我尝试设置它的片段:

public class TJPageOne extends Fragment {

    private TJViewModel tjViewModel;
    private EditText placeInput, peopleInput;
    private RadioGroup timeRadioGroup , peopleRadioGroup;
    private RadioButton timeRadioButton, peopleRadioButton;
    private Button returnButton, nextButton;

    public TJPageOne() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        tjViewModel = new ViewModelProvider(requireActivity()).get(TJViewModel.class);
      }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_tj_page_one, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        findViews(view);
        setRadioGroups();
        setButtons();

    }

    private void findViews(View view) {
        placeInput = view.findViewById(R.id.place_input);
        peopleInput = view.findViewById(R.id.people_input);
        returnButton = view.findViewById(R.id.tj_return);
        nextButton = view.findViewById(R.id.page_one_next);
        timeRadioGroup = view.findViewById(R.id.time_radiogroup);
        peopleRadioGroup = view.findViewById(R.id.people_radiogroup);
    }

    private void setRadioGroups() {

    }

    private void setButtons() {
        returnButton.setOnClickListener(v ->{
            Intent intent = new Intent(this.requireActivity(), MainActivity.class);
            startActivity(intent);
            getActivity().finish();
        });

        nextButton.setOnClickListener(v ->{
            peopleRadioGroup.setOnCheckedChangeListener((group, checkedId) -> {
                // Get the selected Radio Button
                if(checkedId == R.id.morning){
                    tjViewModel.setTimeText("Morning");
                }
                else if(checkedId == R.id.noonish){
                    tjViewModel.setTimeText("Noonish");
                }
                else if(checkedId == R.id.afternoon){
                    tjViewModel.setTimeText("Afternoon");
                }
                else if(checkedId == R.id.evening) {
                    tjViewModel.setTimeText("Evening");
                }
                else if(checkedId == R.id.night){
                    tjViewModel.setTimeText("Night");
                }
                else{
                    tjViewModel.setTimeText("No time selected");
                }
            });
            timeRadioGroup.setOnCheckedChangeListener(((group, checkedId) -> {
                if(checkedId == R.id.alone){
                    tjViewModel.setPeopleText("Alone");
                }
                else{
                    tjViewModel.setPeopleText(peopleInput.getText().toString());
                }
            }));

            NavController navController = Navigation.findNavController(getView());
            navController.navigate(R.id.action_tjPageOne_to_tjPageTwo);
        });
    }
}

视图模型:

import androidx.lifecycle.ViewModel;
import java.util.ArrayList;

public class TJViewModel extends ViewModel {
    private String locationText = "";
    private String timeText = "";
    private String peopleText = "";
    private String situationText = "";
    private String behaviorText = "";
    private String emotionText = "";
    private String emotionalActionText = "";
    private ArrayList<String> thoughtArray;



    public void setlocationText(CharSequence input) {
        locationText = input.toString();
    }

    public void setTimeText(String input) {
        timeText = input;
    }

    public void setPeopleText(String input) {peopleText = input;}

    public void setSituationText(CharSequence input){
        situationText = input.toString();
    }

    public void setBehaviorText(CharSequence input){
        behaviorText = input.toString();
    }

    public void setEmotionText(CharSequence input){
        emotionText = input.toString();
    }

    public void setEmotionalActionText(CharSequence input){ emotionalActionText = input.toString(); }

    public void setThoughtArray(ArrayList<String> input){ thoughtArray = input;
    }

    public String getLocationText() {
        return locationText;
    }
    public String getTimeText(){ return timeText; }
    public String getPeopleText() {return  peopleText;}
    public String getSituationText(){ return situationText; }
    public String getBehaviorText(){ return behaviorText; }
    public String getEmotionText(){ return emotionText; }
    public String getEmotionalActionText(){ return emotionalActionText; }
    public ArrayList<String> getThoughtArray(){ return thoughtArray; }

}

由于您在setOnClickListener内设置了setOnCheckedChangeListener单选按钮,因此只有在单击下一步按钮后才会进行侦听

试一试:

private void setButtons() {
        returnButton.setOnClickListener(v ->{
            Intent intent = new Intent(this.requireActivity(), MainActivity.class);
            startActivity(intent);
            getActivity().finish();
        });
        peopleRadioGroup.setOnCheckedChangeListener((group, checkedId) -> {
            // Get the selected Radio Button
            if(checkedId == R.id.morning){
                tjViewModel.setTimeText("Morning");
            }
            else if(checkedId == R.id.noonish){
                tjViewModel.setTimeText("Noonish");
            }
            else if(checkedId == R.id.afternoon){
                tjViewModel.setTimeText("Afternoon");
            }
            else if(checkedId == R.id.evening) {
                tjViewModel.setTimeText("Evening");
            }
            else if(checkedId == R.id.night){
                tjViewModel.setTimeText("Night");
            }
            else{
                tjViewModel.setTimeText("No time selected");
            }
        });
        timeRadioGroup.setOnCheckedChangeListener(((group, checkedId) -> {
            if(checkedId == R.id.alone){
                tjViewModel.setPeopleText("Alone");
            }
            else{
                tjViewModel.setPeopleText(peopleInput.getText().toString());
            }
        }));
        nextButton.setOnClickListener(v ->{
            NavController navController = Navigation.findNavController(getView());
            navController.navigate(R.id.action_tjPageOne_to_tjPageTwo);
        });
    }

由于您在setOnClickListener内设置了setOnCheckedChangeListener单选按钮,因此只有在单击下一步按钮后才会进行侦听

试一试:

private void setButtons() {
        returnButton.setOnClickListener(v ->{
            Intent intent = new Intent(this.requireActivity(), MainActivity.class);
            startActivity(intent);
            getActivity().finish();
        });
        peopleRadioGroup.setOnCheckedChangeListener((group, checkedId) -> {
            // Get the selected Radio Button
            if(checkedId == R.id.morning){
                tjViewModel.setTimeText("Morning");
            }
            else if(checkedId == R.id.noonish){
                tjViewModel.setTimeText("Noonish");
            }
            else if(checkedId == R.id.afternoon){
                tjViewModel.setTimeText("Afternoon");
            }
            else if(checkedId == R.id.evening) {
                tjViewModel.setTimeText("Evening");
            }
            else if(checkedId == R.id.night){
                tjViewModel.setTimeText("Night");
            }
            else{
                tjViewModel.setTimeText("No time selected");
            }
        });
        timeRadioGroup.setOnCheckedChangeListener(((group, checkedId) -> {
            if(checkedId == R.id.alone){
                tjViewModel.setPeopleText("Alone");
            }
            else{
                tjViewModel.setPeopleText(peopleInput.getText().toString());
            }
        }));
        nextButton.setOnClickListener(v ->{
            NavController navController = Navigation.findNavController(getView());
            navController.navigate(R.id.action_tjPageOne_to_tjPageTwo);
        });
    }

首先,您需要将所有
CheckedChangeListener
移动到外部,然后单击listener进行检查。为什么在
ClickListener
内部有
setOnCheckedChangeListener
?也许这就是问题所在。此外,如果您不使用LiveData,您将不知道值何时更新。我这样做是为了在片段中单击“下一步”按钮时获取值。首先,您需要将所有
CheckedChangeListener
移至Click listener外部,然后单击check。为什么在
Click listener
内部有
设置CheckedChangeListener
?也许这就是问题所在。另外,如果你不使用LiveData,你将不知道值何时更新。我这样做是为了在片段中单击“下一步”按钮时获取值。感谢它的工作,我不明白一旦checkedChangeListener工作,这是多么愚蠢的错误!感谢它的工作,我不明白一旦checkedChangeListener醒来,这是多么愚蠢的错误!