2017-08-07 5 views
-1

Je suis complètement perdu et je ne sais pas pourquoi mon ListView n'est pas rempli. Dans ma méthode où j'insère des données dans mon ArrayList, il est indiqué que mon symbole adapter ne peut pas être résolu, mais pour autant que je sache, j'ai correctement déclaré l'adaptateur dans mon onCreate.ArrayList et ListView ne sont pas remplis

Ai-je raison de supposer que si j'ai un ListView à l'intérieur de mon activité, mettre en place un ArrayList qui remplit mon adaptateur, puis attachez cette carte à la ListView que mon ListView est automatiquement renseigné dans mon activité chaque fois que le array reçoit des informations?

Voici mes déclarations à l'intérieur de mon 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); 

Ce sont les méthodes que je utilise pour ajouter des données dans mon ArrayList.

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; 
    } 
} 

L'application ne tombe pas en panne et je suis en mesure d'entrer des valeurs dans mon EditText. Ci-dessous le XML pour le 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" /> 

Répondre

0

Chaque fois que vous mettez à jour le modèle observé par l'adaptateur, vous devez appeler

adapter.notifyDataSetChanged() 

Donc dans votre cas,

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

Désolé, je suis nouveau au codage et à tout, mais modèle voulez-vous dire 'ArrayList'? Je ne suis pas sûr de l'endroit où je devrais appeler cette fonction. –

+0

Oui, puisque les éléments de votre adaptateur sont basés sur votre ArrayList, chaque fois que vous ajoutez à cette ArrayList, votre adaptateur doit être notifié qu'un nouvel élément a été ajouté via adapter.notifyDataSetChanged() –

+0

Aussi, je crois que vous devriez ajouter à votre ArrayList , pas l'adaptateur réel. J'ai mis à jour ma réponse. –