第二次调用后,在 gridlayout 选项中设置数据不起作用
Setting data in gridlayout options is not working after calling it second time
我正在使用 class 与 ArrayList
合作,我必须将其值放在 gridlayouts 选项中。
第一次在 OnCreate
上运行良好并且 setText
更正了位置
但是在第二次调用 class 之后它崩溃了。
同一个代码怎么能运行一次就崩溃
(我认为错误在最后几行:-> 见后面 classes)
public class playGame extends Fragment {
View view;
Button option1Button,option2Button,option3Button,option4Button;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle bundle) {
view=inflater.inflate(R.layout.fragment_play_game, container, false);
option1Button=view.findViewById(R.id.option1);
option2Button=view.findViewById(R.id.option2);
option3Button=view.findViewById(R.id.option3);
option4Button=view.findViewById(R.id.option4);
String gameName=getArguments().getString("Name");
TextView levelNameTextView=view.findViewById(R.id.levelNameTextView);
levelNameTextView.setText(gameName);
Button playAgainButton=view.findViewById(R.id.gameOverTry);
playAgainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(view).navigate(R.id.action_playGame_to_gameOver);
}
});
final ProcessGame processGame=new ProcessGame();
GetAndPutData();
option1Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option1Button.getText().toString());
}
});
option2Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option2Button.getText().toString());
}
});
option3Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option3Button.getText().toString());
}
});
option4Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option4Button.getText().toString());
}
});
return view;
}
public class ProcessGame{
String question,option1,option2,option3,option4,correctAnswer;
TextView questionBox=view.findViewById(R.id.questionBox);
List<String> questionlist=new ArrayList<String>();
public void setValues(String question,String option1,String option2,String option3,String option4,String correctAnswer){
this.option1=option1;
this.option2=option2;
this.option3=option3;
this.option4=option4;
this.question=question;
this.correctAnswer=correctAnswer;
questionlist.add(0,option1);
questionlist.add(1,option2);
questionlist.add(2,option3);
questionlist.add(3,option4);
shuffleOption();
questionBox.setText(question);
}
public void shuffleOption(){
Collections.shuffle(questionlist);
putOptionsInButton();
}
public void putOptionsInButton(){
option1Button.setText(questionlist.get(0));
option2Button.setText(questionlist.get(1));
option3Button.setText(questionlist.get(2));
option4Button.setText(questionlist.get(3));
}
public void compareWithCorrect(String pressedButtonValue){
TextView feedbackBox=view.findViewById(R.id.feedbackBox);
if (pressedButtonValue==correctAnswer){
feedbackBox.setText("Correct :-)");
GetAndPutData();
}
else{
feedbackBox.setText("Wrong :-(");
shuffleOption();
}
}
}
public void GetAndPutData(){
ProcessGame processGame=new ProcessGame();
processGame.setValues("1+1=?","2","1","3","4","2");
}
}
这是我的错误:->
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.example.quiz_createandplay.playGame$ProcessGame.putOptionsInButton(playGame.java:117)
at com.example.quiz_createandplay.playGame$ProcessGame.shuffleOption(playGame.java:113)
当答案正确时,您将调用 getAndPutData() 调用设置值,那是该应用程序运行的时间 fine.but,当答案错误时,您将其发送到调用 putOptionsInButton 的 shuffleOption() () 看到一个空列表,即使答案是错误的,你也必须将 DATA 设置到你的列表中,例如,如果你在 shuffleOption() 中调用 setValues() ,你就不会崩溃。
public void shuffleOption(){
Collections.shuffle(questionlist);
processGame.setValues("1+1=?","2","1","3","4","2");
putOptionsInButton();
}
我正在使用 class 与 ArrayList
合作,我必须将其值放在 gridlayouts 选项中。
第一次在 OnCreate
上运行良好并且 setText
更正了位置
但是在第二次调用 class 之后它崩溃了。
同一个代码怎么能运行一次就崩溃
(我认为错误在最后几行:-> 见后面 classes)
public class playGame extends Fragment {
View view;
Button option1Button,option2Button,option3Button,option4Button;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle bundle) {
view=inflater.inflate(R.layout.fragment_play_game, container, false);
option1Button=view.findViewById(R.id.option1);
option2Button=view.findViewById(R.id.option2);
option3Button=view.findViewById(R.id.option3);
option4Button=view.findViewById(R.id.option4);
String gameName=getArguments().getString("Name");
TextView levelNameTextView=view.findViewById(R.id.levelNameTextView);
levelNameTextView.setText(gameName);
Button playAgainButton=view.findViewById(R.id.gameOverTry);
playAgainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(view).navigate(R.id.action_playGame_to_gameOver);
}
});
final ProcessGame processGame=new ProcessGame();
GetAndPutData();
option1Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option1Button.getText().toString());
}
});
option2Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option2Button.getText().toString());
}
});
option3Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option3Button.getText().toString());
}
});
option4Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option4Button.getText().toString());
}
});
return view;
}
public class ProcessGame{
String question,option1,option2,option3,option4,correctAnswer;
TextView questionBox=view.findViewById(R.id.questionBox);
List<String> questionlist=new ArrayList<String>();
public void setValues(String question,String option1,String option2,String option3,String option4,String correctAnswer){
this.option1=option1;
this.option2=option2;
this.option3=option3;
this.option4=option4;
this.question=question;
this.correctAnswer=correctAnswer;
questionlist.add(0,option1);
questionlist.add(1,option2);
questionlist.add(2,option3);
questionlist.add(3,option4);
shuffleOption();
questionBox.setText(question);
}
public void shuffleOption(){
Collections.shuffle(questionlist);
putOptionsInButton();
}
public void putOptionsInButton(){
option1Button.setText(questionlist.get(0));
option2Button.setText(questionlist.get(1));
option3Button.setText(questionlist.get(2));
option4Button.setText(questionlist.get(3));
}
public void compareWithCorrect(String pressedButtonValue){
TextView feedbackBox=view.findViewById(R.id.feedbackBox);
if (pressedButtonValue==correctAnswer){
feedbackBox.setText("Correct :-)");
GetAndPutData();
}
else{
feedbackBox.setText("Wrong :-(");
shuffleOption();
}
}
}
public void GetAndPutData(){
ProcessGame processGame=new ProcessGame();
processGame.setValues("1+1=?","2","1","3","4","2");
}
}
这是我的错误:->
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.example.quiz_createandplay.playGame$ProcessGame.putOptionsInButton(playGame.java:117)
at com.example.quiz_createandplay.playGame$ProcessGame.shuffleOption(playGame.java:113)
当答案正确时,您将调用 getAndPutData() 调用设置值,那是该应用程序运行的时间 fine.but,当答案错误时,您将其发送到调用 putOptionsInButton 的 shuffleOption() () 看到一个空列表,即使答案是错误的,你也必须将 DATA 设置到你的列表中,例如,如果你在 shuffleOption() 中调用 setValues() ,你就不会崩溃。
public void shuffleOption(){
Collections.shuffle(questionlist);
processGame.setValues("1+1=?","2","1","3","4","2");
putOptionsInButton();
}