Java 在android studio中的活动中,在onCreate方法之前向列表添加对象
我只是对一些东西感到好奇,所以我尝试用这种方式编写一些代码:Java 在android studio中的活动中,在onCreate方法之前向列表添加对象,java,android-studio,Java,Android Studio,我只是对一些东西感到好奇,所以我尝试用这种方式编写一些代码: package com.bignerdranch.android.geoquiz; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.widget.Button; import android.
package com.bignerdranch.android.geoquiz;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private Button trueButton, falseButton, nextButton;
private ArrayList<Question> questionList = new ArrayList<Question>();
private int currentIndex = 0;
private TextView questionTextView;
questionList.add(new Question(R.string.question_australia,true));
questionList.add(new Question(R.string.question_oceans, true));
questionList.add(new Question(R.string.question_mideast, false));
questionList.add(new Question(R.string.question_africa, false));
questionList.add(new Question(R.string.question_americas, true));
questionList.add(new Question(R.string.question_asia, true));
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
trueButton = findViewById(R.id.true_button);
falseButton = findViewById(R.id.false_button);
nextButton = findViewById(R.id.next_button);
questionTextView = findViewById(R.id.question_text_view);
Toast toast = Toast.makeText(this,R.string.correct_toast,Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP,0,0);
trueButton.setOnClickListener((View v) ->{
toast.show();
});
falseButton.setOnClickListener((View view) -> {
toast.show();
});
}
}
package com.bignerdranch.android.geoquick;
导入androidx.appcompat.app.appcompat活动;
导入android.os.Bundle;
导入android.view.Gravity;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.util.ArrayList;
公共类MainActivity扩展了AppCompatActivity{
私人按钮trueButton、falseButton、nextButton;
private ArrayList questionList=新建ArrayList();
私有int currentIndex=0;
私有文本视图问题文本视图;
添加(新问题(R.string.Question_australia,true));
添加(新问题(R.string.Question_,true));
添加(新问题(R.string.Question_mideast,false));
添加(新问题(R.string.Question_africa,false));
添加(新问题(R.string.Question_,true));
添加(新问题(R.string.Question_asia,true));
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
trueButton=findviewbyd(R.id.true\u按钮);
falseButton=findViewById(R.id.false_按钮);
nextButton=findviewbyd(R.id.next_按钮);
questionTextView=findViewById(R.id.question\u text\u视图);
Toast Toast=Toast.makeText(this,R.string.correct\u Toast,Toast.LENGTH\u SHORT);
toast.setGravity(Gravity.TOP,0,0);
trueButton.setOnClickListener((视图v)->{
toast.show();
});
falseButton.setOnClickListener((视图)->{
toast.show();
});
}
}
但是,只有在onCreate方法之前添加这些问题对象时,才会出现错误
代码工作时的一个示例:
package com.bignerdranch.android.geoquiz;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private Button trueButton, falseButton, nextButton;
private ArrayList<Question> questionList = new ArrayList<Question>();
private int currentIndex = 0;
private TextView questionTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
trueButton = findViewById(R.id.true_button);
falseButton = findViewById(R.id.false_button);
nextButton = findViewById(R.id.next_button);
questionTextView = findViewById(R.id.question_text_view);
Toast toast = Toast.makeText(this,R.string.correct_toast,Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP,0,0);
trueButton.setOnClickListener((View v) ->{
toast.show();
});
falseButton.setOnClickListener((View view) -> {
toast.show();
});
questionList.add(new Question(R.string.question_australia,true));
questionList.add(new Question(R.string.question_oceans, true));
questionList.add(new Question(R.string.question_mideast, false));
questionList.add(new Question(R.string.question_africa, false));
questionList.add(new Question(R.string.question_americas, true));
questionList.add(new Question(R.string.question_asia, true));
}
}
package com.bignerdranch.android.geoquick;
导入androidx.appcompat.app.appcompat活动;
导入android.os.Bundle;
导入android.view.Gravity;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.util.ArrayList;
公共类MainActivity扩展了AppCompatActivity{
私人按钮trueButton、falseButton、nextButton;
private ArrayList questionList=新建ArrayList();
私有int currentIndex=0;
私有文本视图问题文本视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
trueButton=findviewbyd(R.id.true\u按钮);
falseButton=findViewById(R.id.false_按钮);
nextButton=findviewbyd(R.id.next_按钮);
questionTextView=findViewById(R.id.question\u text\u视图);
Toast Toast=Toast.makeText(this,R.string.correct\u Toast,Toast.LENGTH\u SHORT);
toast.setGravity(Gravity.TOP,0,0);
trueButton.setOnClickListener((视图v)->{
toast.show();
});
falseButton.setOnClickListener((视图)->{
toast.show();
});
添加(新问题(R.string.Question_australia,true));
添加(新问题(R.string.Question_,true));
添加(新问题(R.string.Question_mideast,false));
添加(新问题(R.string.Question_africa,false));
添加(新问题(R.string.Question_,true));
添加(新问题(R.string.Question_asia,true));
}
}
为什么在onCreate方法之前将对象添加到列表时会显示错误?我真的希望我能得到一个专业的答案,这样我就能更好地理解onCreate方法。这里有两个问题:
String text=“hello”)。子字符串(3)
可以工作,“hello”。子字符串(3)
不能单独工作onCreate()
之前的任何资源。这与在静态部分中执行的代码不同(static{…}
),在程序启动时调用,可以多次调用onCreate方法(例如,我单击“上一步”按钮[没有要返回的活动]。活动已停止,但应用程序未关闭。当我重新打开应用程序时,它仍会启动,就像程序一样- 在onCreate之前,您可以执行任何与android资源无关的操作(例如创建ArrayList)
- 为了避免混淆:在调用
之前,您总是需要在findViewById()
中调用onCreate()
,因为Android需要知道它应该从哪个布局获得视图,这是另一个主题setContentView()