Ich bin komplett verloren und habe keine Ahnung, warum meine ListView
wird nicht aufgefüllt. In meiner Methode, wo ich Daten in meine ArrayList
einfüge, heißt es, dass mein adapter
Symbol nicht aufgelöst werden kann, aber soweit ich weiß, habe ich den Adapter richtig in meinem onCreate
deklariert.ArrayList und ListView werden nicht ausgefüllt
Bin ich in der Annahme richtig, dass, wenn ich eine ListView
innerhalb meiner Tätigkeit haben, eine ArrayList
einrichten, die mein Adapter füllt, und dann diesen Adapter an den ListView
binden, die meine ListView
wird in meiner Tätigkeit Auto-bevölkern, wenn die array
erhält Informationen?
Hier sind meine Erklärungen innerhalb meiner onCreate
.
ListView listView = (ListView) findViewById(R.id.dispScores);
ArrayList<viewScores> savedScores = new ArrayList<viewScores>();
ScoreAdapter adapter = new ScoreAdapter(this, savedScores);
adapter.setDropDownViewResource(android.R.layout.simple_list_item_1);
listView.setAdapter(adapter);
Dies sind die Methoden, die ich Daten in meine ArrayList
hinzufügen verwenden.
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));
//ATTEMPTING TO WRITE TO ARRAYLIST
viewScores addScore = new viewScores(input1.getText().toString());
adapter.notifyDataSetChanged();
adapter.add(addScore); //WHY DOESNT THIS WORK?
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;
}
}
};
public class viewScores {
public String hole;
public viewScores(String holeNum) {
this.hole = holeNum;
}
}
public class ScoreAdapter extends ArrayAdapter<viewScores> {
public ScoreAdapter(Context context, ArrayList<viewScores> scores) {
super(context, 0, scores);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewScores score1 = getItem(position);
if (convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.activity_main, parent, false);
}
TextView ListView1 = (TextView) convertView.findViewById(R.id.dispScores);
ListView1.setText(score1.hole);
return convertView;
}
}
Die App stürzt nicht, und ich bin in der Lage Wert in meine EditText
einzugeben. Unten ist das XML für die ListView
.
<ListView
android:id="@+id/dispScores"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
app:layout_constraintLeft_toLeftOf="parent"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintTop_creator="1"
tools:layout_editor_absoluteY="244dp" />
Sorry, ich bin neu in Codierung und alles, aber durch Modell meinst du die 'ArrayList'? Ich bin unsicher, wo ich diese Funktion nennen soll. –
Ja, da die Elemente Ihres Adapters auf Ihrer ArrayList basieren, sollte Ihr Adapter jedes Mal, wenn Sie diese ArrayList hinzufügen, darüber informiert werden, dass ein neues Objekt hinzugefügt wurde adapter.notifyDataSetChanged() –
Ich glaube auch, dass Sie Ihre ArrayList hinzufügen sollten nicht der eigentliche Adapter. Ich habe meine Antwort aktualisiert. –