2017-08-07 2 views
-1

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" /> 

Antwort

0

Jedes Mal, wenn Sie das Modell von Ihrem Adapter beobachtet aktualisieren, müssen Sie

adapter.notifyDataSetChanged() 

Also in Ihrem Fall nennen,

viewScores addScore = new viewScores(input1.getText().toString()); 
savedScores.add(addScore); 
adapter.notifyDataSetChanged() 
+0

Sorry, ich bin neu in Codierung und alles, aber durch Modell meinst du die 'ArrayList'? Ich bin unsicher, wo ich diese Funktion nennen soll. –

+0

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() –

+0

Ich glaube auch, dass Sie Ihre ArrayList hinzufügen sollten nicht der eigentliche Adapter. Ich habe meine Antwort aktualisiert. –