2015-09-13 102 views
2

我有一個問題/答案的應用程序。我想改變的listItem顏色這個問題是由author.Here回答是片段ListView項目背景:Android

for (int i = 0; i < response.length(); i++) { 
          try { 

           JSONObject obj = response.getJSONObject(i); 
           QuestionGetSet movie = new QuestionGetSet(); 
           movie.setQues(obj.getString("abc")); 
           movie.setDate(obj.getString("def")); 
           movie.setNumber(obj.getString("ghi")); 
           farmerName[i] = obj.getString("jkl"); 
           cropType[i] = obj.getString("mno"); 
           relatedField[i] = obj.getString("pqr"); 
           number[i]=obj.getString("stu"); 
           // adding movie to movies array 
           movieList.add(movie); 
           if(i==0) { 
            listView.getChildAt(i).setBackgroundColor(Color.GREEN); 
           } 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 

的問題是,該程序在

if(i==0) { 
              listView.getChildAt(i).setBackgroundColor(Color.GREEN); 
           } 

適配器代碼給NullPointerException異常:

public class CustomListAdapter extends BaseAdapter { 
private Activity activity; 
private LayoutInflater inflater; 
private List<QuestionGetSet> quesItems; 


public CustomListAdapter(Activity activity, List<QuestionGetSet> quesItems) { 
    this.activity = activity; 
    this.quesItems = quesItems; 
} 



@Override 
public int getCount() { 
    return quesItems.size(); 
} 

@Override 
public Object getItem(int location) { 
    return quesItems.get(location); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (inflater == null) 
     inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) 
     convertView = inflater.inflate(R.layout.custom_list_layout_home, null); 

    TextView question = (TextView) convertView.findViewById(R.id.txt_questions); 
    TextView date = (TextView) convertView.findViewById(R.id.txt_date); 
    TextView number = (TextView) convertView.findViewById(R.id.txt_asked_by); 

    // getting movie data for the row 
    QuestionGetSet m = quesItems.get(position); 

    // title 
    question.setText(m.getQues()); 

    // rating 
    date.setText(m.getDate()); 

    // release year 
    number.setText(m.getNumber()); 

    return convertView; 
} 

}

我希望我清楚。請幫助。

+0

在'Adapter'' getView'方法中設置項目背景。 –

+0

@dieter_h可以給你更多的幫助 –

+0

是的。發佈適配器代碼。 –

回答

1

這是因爲您在實際設置listview之前調用listView.getChildAt(i)。嘗試更改適配器中的背景顏色getView()

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (inflater == null) 
     inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) 
     convertView = inflater.inflate(R.layout.custom_list_layout_home, null); 

    TextView question = (TextView) convertView.findViewById(R.id.txt_questions); 
    TextView date = (TextView) convertView.findViewById(R.id.txt_date); 
    TextView number = (TextView) convertView.findViewById(R.id.txt_asked_by); 

    // getting movie data for the row 
    QuestionGetSet m = quesItems.get(position); 

    // title 
    question.setText(m.getQues()); 

    // rating 
    date.setText(m.getDate()); 

    if (position == 0) { 
     convertView.setBackgroundColor(Color.GREEN); 
    } 

    return conertView; 
} 

希望它對您有用。

+0

是的,我也這麼做。無論如何,謝謝你的幫助。 –