android 视图模型,无法设置值
android viewmodel, can not set value
我无法根据视图模型中的单选按钮设置字符串值。我只想让用户根据他们点击的内容进行选择并将其发送到视图模型
当我尝试记录该值时,它只是保持空白
我看到了一些答案,但 none 对我的情况有所帮助
我尝试设置它的片段:
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; }
}
在帮助下修复了它,这是工作代码:
public class TJPageOne extends Fragment {
private TJViewModel tjViewModel;
private EditText placeInput, peopleInput;
private RadioGroup timeRadioGroup , peopleRadioGroup;
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(view);
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(View view) {
timeRadioGroup.setOnCheckedChangeListener((group, checkedId) -> {
RadioButton timeRadioButton = (RadioButton) view.findViewById(checkedId);
tjViewModel.setTimeText(timeRadioButton.getText().toString());
});
peopleRadioGroup.setOnCheckedChangeListener(((group, checkedId) -> {
RadioButton peopleRadioButton = (RadioButton) view.findViewById(checkedId);
tjViewModel.setPeopleText(peopleRadioButton.getText().toString());
}));
}
private void setButtons() {
returnButton.setOnClickListener(v ->{
Intent intent = new Intent(this.requireActivity(), MainActivity.class);
startActivity(intent);
getActivity().finish();
});
nextButton.setOnClickListener(v ->{
NavController navController = Navigation.findNavController(getView());
navController.navigate(R.id.action_tjPageOne_to_tjPageTwo);
});
}
}
因为您在 setOnClickListener 单选按钮中设置了 setOnCheckedChangeListener,只有在您单击 nextButton 后才会监听。
这样试试:
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);
});
}
我无法根据视图模型中的单选按钮设置字符串值。我只想让用户根据他们点击的内容进行选择并将其发送到视图模型 当我尝试记录该值时,它只是保持空白
我看到了一些答案,但 none 对我的情况有所帮助
我尝试设置它的片段:
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; }
}
在帮助下修复了它,这是工作代码:
public class TJPageOne extends Fragment {
private TJViewModel tjViewModel;
private EditText placeInput, peopleInput;
private RadioGroup timeRadioGroup , peopleRadioGroup;
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(view);
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(View view) {
timeRadioGroup.setOnCheckedChangeListener((group, checkedId) -> {
RadioButton timeRadioButton = (RadioButton) view.findViewById(checkedId);
tjViewModel.setTimeText(timeRadioButton.getText().toString());
});
peopleRadioGroup.setOnCheckedChangeListener(((group, checkedId) -> {
RadioButton peopleRadioButton = (RadioButton) view.findViewById(checkedId);
tjViewModel.setPeopleText(peopleRadioButton.getText().toString());
}));
}
private void setButtons() {
returnButton.setOnClickListener(v ->{
Intent intent = new Intent(this.requireActivity(), MainActivity.class);
startActivity(intent);
getActivity().finish();
});
nextButton.setOnClickListener(v ->{
NavController navController = Navigation.findNavController(getView());
navController.navigate(R.id.action_tjPageOne_to_tjPageTwo);
});
}
}
因为您在 setOnClickListener 单选按钮中设置了 setOnCheckedChangeListener,只有在您单击 nextButton 后才会监听。
这样试试:
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);
});
}