使用 ArrayAdapter 生成 ListView
Generating a ListView Using ArrayAdapter
我正在尝试使用 ArrayAdapter
填充 ListView
,我正在用 EditText
的输入填充它。我的程序似乎可以正常编译,但在应用程序启动期间它会立即崩溃。我怀疑这与我尝试设置列表视图有关。我不确定我在初始化什么错误,以至于我的应用程序立即崩溃。任何和所有提示将不胜感激。提前致谢!
这是我的 ArrayList
和 Adapter
的全局声明。
ArrayList<scoreScreen> savedScores = new ArrayList<>();
ScoreAdapter adapter = new ScoreAdapter(this, savedScores);
ListView listView = (ListView) findViewById(R.id.dispScores);
listView.setAdapter(adapter);
我的适配器Class:
private class ScoreAdapter extends ArrayAdapter<scoreScreen> {
private ScoreAdapter(Context context, ArrayList<scoreScreen> scores) {
super(context, 0, scores);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
scoreScreen score1 = getItem(position);
if (convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_scores, parent, false);
}
TextView holeNum = (TextView) convertView.findViewById(R.id.holeNum);
holeNum.setText(score1.hole);
return convertView;
}
}
我的 ListView
在我的 onCreate
方法中。
ListView listview = (ListView) findViewById(R.id.listView1);
listview.setAdapter(adapter);
我假设我的问题不在我的 EditText
输入中,因为它们在 OnClickListener
方法中,但以防万一我在下面附加了它。
public View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText input1 = (EditText) findViewById(R.id.scorePrompt);
TextView output1 = (TextView) findViewById(R.id.textTotal);
String blankCheck = input1.getText().toString(); //CHANGE INPUT IN scorePrompt TO STRING
switch (view.getId()) {
case R.id.buttTotal:
if (blankCheck.equals("")) {
Toast blankError = Toast.makeText(getApplicationContext(), "YOU CANT SKIP HOLES JERK", Toast.LENGTH_LONG);
blankError.show();
break;
} else {
int num1 = Integer.parseInt(input1.getText().toString()); //Get input from text box
int sum = num1 + score2;
score2 = sum;
output1.setText("Your score is : " + Integer.toString(sum));
//savedScores.add(input1.getText().toString());
scoreScreen addScore = new scoreScreen("Score is" + num1);
adapter.add(addScore);
j++;
input1.setText(""); //Clear input text box
break;
}
case R.id.allScores: //CHANGE THIS TO AN EDIT BUTTON, ADD A HOLE NUMBER COUNTER AT TOP OF SCREEN!!!!!
output1.setText("you messed up");
break;
case R.id.editScore: //Need to set up Save Array before we can edit
//CURRENTLY ONLY DISPLAYS THE LAST NUNMBER IN THE TEXTEDIT, NEED TO SET UP LISTVIEW!!!!!!
for (int i=0; i < j; i++){
// output1.setText(savedScores.get(i));
} break;
}
}
};
onCreate
按要求添加的方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*Button scoresAct = (Button) findViewById(R.id.allScores); //THIS IS TO GO TO ALL SCORES ACTIVITY
scoresAct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent scoreScreen = new Intent(MainActivity.this, AllScoresAct.class);
startActivity(scoreScreen);
}
});*/
Button sumScores = (Button) findViewById(R.id.buttTotal);
Button saveScores = (Button) findViewById(R.id.allScores);
Button changeScores = (Button) findViewById(R.id.editScore);
sumScores.setOnClickListener(onClickListener);
saveScores.setOnClickListener(onClickListener);
changeScores.setOnClickListener(onClickListener);
ListView listview = (ListView) findViewById(R.id.listView1);
listview.setAdapter(adapter);
}
将我的适配器和 ArrayList 移动到我的 onCreate
后,我收到一个新错误。我对空指针做了一些研究,但我已经初始化了这两个。下面是我的logcat,有什么想法吗?谢谢
确保 super.onCreate(savedInstanceState)
是您在 onCreate() 中调用的第一件事,并且在 setContentView()
.[=14 之前不要尝试从布局 xml 访问任何视图=]
编辑:
在 onCreate()
方法中初始化适配器,而不是全局执行。
onCreate() {
.......
this.adapter = new ScoreAdapter(this, savedScores);
}
This is my global declarations for my ArrayList and Adapter.
ArrayList<scoreScreen> savedScores = new ArrayList<>();
ScoreAdapter adapter = new ScoreAdapter(this, savedScores);
你可以在全局声明那些,但是对于Adapter,必须使用this
参数within/after onCreate
,作为错误说
System services not available to Activities before onCreate()
例如
private ArrayList<ScoreScreen> savedScores = new ArrayList<>();
private ScoreAdapter adapter;
@Override
protected void onCreate(Bundle b) {
...
adapter = new ScoreAdapter(this, savedScores);
}
我正在尝试使用 ArrayAdapter
填充 ListView
,我正在用 EditText
的输入填充它。我的程序似乎可以正常编译,但在应用程序启动期间它会立即崩溃。我怀疑这与我尝试设置列表视图有关。我不确定我在初始化什么错误,以至于我的应用程序立即崩溃。任何和所有提示将不胜感激。提前致谢!
这是我的 ArrayList
和 Adapter
的全局声明。
ArrayList<scoreScreen> savedScores = new ArrayList<>();
ScoreAdapter adapter = new ScoreAdapter(this, savedScores);
ListView listView = (ListView) findViewById(R.id.dispScores);
listView.setAdapter(adapter);
我的适配器Class:
private class ScoreAdapter extends ArrayAdapter<scoreScreen> {
private ScoreAdapter(Context context, ArrayList<scoreScreen> scores) {
super(context, 0, scores);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
scoreScreen score1 = getItem(position);
if (convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_scores, parent, false);
}
TextView holeNum = (TextView) convertView.findViewById(R.id.holeNum);
holeNum.setText(score1.hole);
return convertView;
}
}
我的 ListView
在我的 onCreate
方法中。
ListView listview = (ListView) findViewById(R.id.listView1);
listview.setAdapter(adapter);
我假设我的问题不在我的 EditText
输入中,因为它们在 OnClickListener
方法中,但以防万一我在下面附加了它。
public View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText input1 = (EditText) findViewById(R.id.scorePrompt);
TextView output1 = (TextView) findViewById(R.id.textTotal);
String blankCheck = input1.getText().toString(); //CHANGE INPUT IN scorePrompt TO STRING
switch (view.getId()) {
case R.id.buttTotal:
if (blankCheck.equals("")) {
Toast blankError = Toast.makeText(getApplicationContext(), "YOU CANT SKIP HOLES JERK", Toast.LENGTH_LONG);
blankError.show();
break;
} else {
int num1 = Integer.parseInt(input1.getText().toString()); //Get input from text box
int sum = num1 + score2;
score2 = sum;
output1.setText("Your score is : " + Integer.toString(sum));
//savedScores.add(input1.getText().toString());
scoreScreen addScore = new scoreScreen("Score is" + num1);
adapter.add(addScore);
j++;
input1.setText(""); //Clear input text box
break;
}
case R.id.allScores: //CHANGE THIS TO AN EDIT BUTTON, ADD A HOLE NUMBER COUNTER AT TOP OF SCREEN!!!!!
output1.setText("you messed up");
break;
case R.id.editScore: //Need to set up Save Array before we can edit
//CURRENTLY ONLY DISPLAYS THE LAST NUNMBER IN THE TEXTEDIT, NEED TO SET UP LISTVIEW!!!!!!
for (int i=0; i < j; i++){
// output1.setText(savedScores.get(i));
} break;
}
}
};
onCreate
按要求添加的方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*Button scoresAct = (Button) findViewById(R.id.allScores); //THIS IS TO GO TO ALL SCORES ACTIVITY
scoresAct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent scoreScreen = new Intent(MainActivity.this, AllScoresAct.class);
startActivity(scoreScreen);
}
});*/
Button sumScores = (Button) findViewById(R.id.buttTotal);
Button saveScores = (Button) findViewById(R.id.allScores);
Button changeScores = (Button) findViewById(R.id.editScore);
sumScores.setOnClickListener(onClickListener);
saveScores.setOnClickListener(onClickListener);
changeScores.setOnClickListener(onClickListener);
ListView listview = (ListView) findViewById(R.id.listView1);
listview.setAdapter(adapter);
}
将我的适配器和 ArrayList 移动到我的 onCreate
后,我收到一个新错误。我对空指针做了一些研究,但我已经初始化了这两个。下面是我的logcat,有什么想法吗?谢谢
确保 super.onCreate(savedInstanceState)
是您在 onCreate() 中调用的第一件事,并且在 setContentView()
.[=14 之前不要尝试从布局 xml 访问任何视图=]
编辑:
在 onCreate()
方法中初始化适配器,而不是全局执行。
onCreate() {
.......
this.adapter = new ScoreAdapter(this, savedScores);
}
This is my global declarations for my ArrayList and Adapter.
ArrayList<scoreScreen> savedScores = new ArrayList<>(); ScoreAdapter adapter = new ScoreAdapter(this, savedScores);
你可以在全局声明那些,但是对于Adapter,必须使用this
参数within/after onCreate
,作为错误说
System services not available to Activities before onCreate()
例如
private ArrayList<ScoreScreen> savedScores = new ArrayList<>();
private ScoreAdapter adapter;
@Override
protected void onCreate(Bundle b) {
...
adapter = new ScoreAdapter(this, savedScores);
}