2012-07-10 3 views
0

Salut, je suis en train de créer une liste à partir d'un flux json qui a un en-tête pour chaque date, puis le contenu ci-dessous. Cependant, le flux json que je viens d'arent organisé dans l'ordre de la date, j'ai créé une boucle for qui obtient toutes les dates puis vérifie les doublons qui me donne un tableau de dates du flux. Je veux ensuite ajouter une vue d'en-tête à mon adaptateur pour chaque date et je présume que j'ai alors besoin d'ajouter une autre pour la boucle pour obtenir le contenu sous chaque date? donc ma question est de savoir comment puis-je créer une liste qui ajoute des vues d'en-tête basées sur une boucle for, puis ajoute d'autres vues sous chaque en-tête?Android ajouter des vues dans une boucle for

ici est ma fonction, je suis en cours d'exécution après une AsyncTask

public void FillData() throws JSONException{  

     ListView list = getListView(); 
     list.scrollTo(0, 0); 
     list.setVerticalFadingEdgeEnabled(false); 

      list.setTextFilterEnabled(true); 

      LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View header = inflater.inflate(R.layout.homeheader, list, false); 

     fixturesView = LayoutInflater.from(getBaseContext()).inflate(R.layout.fixturescell, 
       null); 


     //Log.v("MyFix", "fixturesArray = " + fixturesArray); 
     if(fixturesArray.length() < 1){ 

      TextView emptytext = (TextView) fixturesView.findViewById(R.id.TextView02); 
      emptytext.setText("No Upcoming Fixtures Available"); 

     }else{ 
     try{ 

      for(int t = 0; t < fixturesArray.length(); t++){ 
       JSONObject matchDateDict = fixturesArray.getJSONObject(t); 
       String matchDate = matchDateDict.getString("matchdate"); 

       if(matchDatesArray.length() != 0){ 

        int lm = t - 1; 
        JSONObject lastDateDict = fixturesArray.getJSONObject(lm); 
        String lastMatchDate = lastDateDict.getString("matchdate"); 

        Log.v("MyFix", "lastMatchDate " + lastMatchDate); 

        if(matchDate.equals(lastMatchDate)){ 
         Log.v("MyFix", "2 are the same");       
        } else { 
         Log.v("MyFix", "add new matchdate to array"); 
         matchDatesArray.put(matchDate); 
        } 

       } else { 
        Log.v("MyFix", "add new matchdate to array (first time only)");      
        matchDatesArray.put(matchDate);  
       } 
      } 


      Log.v("MyFix", "matchDatesArray = " + matchDatesArray); 

     }catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     DateHeader = LayoutInflater.from(getBaseContext()).inflate(R.layout.redcell, 
       null); 

     adapter = new MergeAdapter(); 

     for(int t = 0; t < matchDatesArray.length(); t++){  

      JSONObject mdheaderdict = matchDatesArray.getJSONObject(t); 
      String matchheader = mdheaderdict.getString("matchdate"); 

       TextView matchdayheader = (TextView) DateHeader.findViewById(R.id.redheadertext); 
       matchdayheader.setText(matchheader); 
       adapter.addView(DateHeader); 
     }    
    }  
     setListAdapter(adapter); 

} 

Heres un exemple de flux JSON

fixturesdata{"code":200,"error":null,"data":{"fixtures":[{"kickoff":"15:00:00","matchdate":"2012-07-14","homescore":null,"awayscore":null,"attendance":null,"homepens":null,"awaypens":null,"division_id":"5059","division":"Testing 1","comp":"LGE","location":null,"fixture_note":null,"hometeam_id":"64930","hometeam":"Team 1","awayteam_id":"64933","awayteam":"Team 4"},{"kickoff":"15:00:00","matchdate":"2012-07-14","homescore":null,"awayscore":null,"attendance":null,"homepens":null,"awaypens":null,"division_id":"5059","division":"Testing 1","comp":"LGE","location":null,"fixture_note":null,"hometeam_id":"64935","hometeam":"Team 6","awayteam_id":"64937","awayteam":"Team 8"},{"kickoff":"15:00:00","matchdate":"2012-07-28","homescore":null,"awayscore":null,"attendance":null,"homepens":null,"awaypens":null,"division_id":"5059","division":"Testing 1","comp":"LGE","location":null,"fixture_note":null,"hometeam_id":"64930","hometeam":"Team 1","awayteam_id":"64931","awayteam":"Team 2"},{"kickoff":"15:00:00","matchdate":"2012-07-28","homescore":null,"awayscore":null,"attendance":null,"homepens":null,"awaypens":null,"division_id":"5059","division":"Testing 1","comp":"LGE","location":null,"fixture_note":null,"hometeam_id":"64930","hometeam":"Team 1","awayteam_id":"64931","awayteam":"Team 2"}]}} 
+0

Quelle est exactement votre question? – kcoppock

+0

désolé donc ma question est de savoir comment puis-je créer une liste qui ajoute des vues d'en-tête basé sur une boucle for, puis ajoute d'autres vues sous chaque en-tête? –

+0

peut-être un ExpandableListView fonctionnerait? – Joel

Répondre

0

Ce que vous voulez est de ne pas ajouter les vues dans une boucle, mais pour faire un ListView approprié avec des sections. Je vous recommande de lire ce tutoriel qui inclut un exemple de code.

Sectioning your ListView

Questions connexes