2016-12-21 5 views
1

Mein CodeListenansicht getChildAt() ist null

public class Products extends AppCompatActivity { 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.addproducts); 
     FillList fillList = new FillList(); 
     fillList.execute(""); 

    } 
    public class FillList extends AsyncTask<String, String, String> { 

     List<Map<String, String>> prolist = new ArrayList<Map<String, String>>(); 
     @Override 
     protected void onPreExecute() { 

     } 

     @Override 
     protected void onPostExecute(String r) { 


      String[] from = { "E","D", "C", "B","A"}; 
      int[] views = { R.id.lblMondeh,R.id.lblBes,R.id.lblBed,R.id.lblSharh,R.id.lblDate}; 
      final SimpleAdapter ADA = new SimpleAdapter(Products.this, 
        prolist, R.layout.lsttemplate, from, 
        views); 
      lstSoratHesab.setAdapter(ADA); 
      lstSoratHesab.setVisibility(View.VISIBLE); 

     if(lstSoratHesab.getChildAt(0-lstSoratHesab.getFirstVisiblePosition())!=null)//all time this line is null 
       lstSoratHesab.getChildAt(0).setBackgroundColor(Color.parseColor("#ff00aa63"));//i want change color first row 

     } 

     @Override 
     protected String doInBackground(String... params) { 

      Map<String, String> datanum = new HashMap<String, String>(); 

      datanum.put("E", "e"); 
      datanum.put("D", "d"); 
      datanum.put("C", "c"); 
      datanum.put("B", "b"); 
      datanum.put("A", "a"); 
      prolist.add(datanum); 

     } 
    } 
} 

ich für die erste Reihe gesetzt Hintergrundfarbe möchten.

warum lstSoratHesab.getChildAt(0-lstSoratHesab.getFirstVisiblePosition()) oder lstSoratHesab.getChildAt(0) alle zeit ist null?

Aber Listenansicht hat 20 Reihe

enter image description here

Antwort

2

getChildAt(0) wird das erste Zeile Element abrufen, aber Sie müssen es in einem Thread zu bekommen, die Zeit zu lassen für das Layout auf dem Bildschirm angezeigt werden, die als gesetzt werden kann:

lstSoratHesab.post(new Runnable() { 
    @Override 
    public void run() { 
     if (lstSoratHesab.getChildAt(0) != null) { 
      lstSoratHesab.getChildAt(0) 
        .setBackgroundColor(Color.parseColor("#ff00aa63")); 
     } 
    } 
}); 
+0

Woher kommt der Code? Past in 'class FillList'? – ashkufaraz

+0

@ashkufaraz In "onPostExecute" wie Sie getan haben. – Fllo

+0

danke das funktioniert, können Sie mehr darüber erklären – ashkufaraz

0

Ich vermute, dass 0-lstSoratHesab.getFirstVisiblePosition() negativ ist. getChildAt gibt immer null für negative Werte zurück.

+0

nein, ' lstSoratHesab.getChildAt (0) 'immer noch die ganze Zeit ist null – ashkufaraz

+0

' lstSoratHesab.getChildAt (0) 'wird in Ihrem Code nicht aufgerufen, wenn die Bedingung nicht wahr ist. – F43nd1r

Verwandte Themen