2012-02-10 65 views
0

遇到一些麻煩我的自定義列表視圖..的Android - NullPointerException異常上的ListView滾動

每個視圖有一個上點擊監聽器工作正常,除了可以向下滾動後所看到的視圖,它拋出一個NullPointerException異常時點擊其中之一。

如果在滾動前可以看到這些視圖,這些視圖實際上是可行的,所以它有點令人困惑。

我的自定義列表視圖代碼如下所示:

public class UserListView extends ArrayAdapter<User>{ 
int resource; 
Context context; 
String response; 

public UserListView(Context context, int resource, List<User> users){ 
    super(context,resource,users); 
    this.resource=resource; 
} 

public View getView(int position, View convertView, ViewGroup parent){ 
    LinearLayout userView; 
    User user = getItem(position); 

    userView = new LinearLayout(getContext()); 
    String inflater = Context.LAYOUT_INFLATER_SERVICE; 
    LayoutInflater layoutInflate; 
    layoutInflate = (LayoutInflater)getContext().getSystemService(inflater); 
    layoutInflate.inflate(resource, userView, true); 

    TextView name = (TextView) userView.findViewById(R.id.name); 
    RatingBar userRating = (RatingBar) userView.findViewById(R.id.userRatingBar); 
    name.setText(String.valueOf(user.getName())); 

    float percentageNumber = ((float) user.getTotalQuestionsCorrect()/(float) user.getTotalQuestionsAnswered()) * 100; 
    int percentage = (int)percentageNumber; 
    setStars(userRating, percentage); 
    userView.setId(user.getUserId()); 
    return userView; 
} 


private void setStars(RatingBar rb, int percent){ 
    RatingBar starRating = rb; 
    int percentage = percent; 

    if(percentage <= 5){starRating.setRating(0);} 
    else if(percentage < 25){starRating.setRating(1);} 
    else if(percentage >= 25 && percentage < 50){starRating.setRating(2);} 
    else if(percentage >= 50 && percentage < 75){starRating.setRating(3);} 
    else if(percentage >= 75 && percentage < 100){starRating.setRating(4);} 
    else{starRating.setRating(5);} 
} 

}

任何幫助將感謝感謝:)

回答

1

有很多怪異的東西在你的getView回事() 方法。我不確定這是否是問題,但值得一試。第一件事是convertView是一個可以回收的視圖,讓您不必爲列表中的每個項目設置新的視圖。另一種是當父對象傳入getView()方法時,你創建一個LinearLayout作爲父視圖。第三個奇怪的是,每當你需要膨脹一個視圖時,你都會得到LayoutInflator。你應該在構造函數中真正得到它,然後堅持下去。試試這個:

public View getView(int position, View convertView, ViewGroup parent){ 
    User user = getItem(position); 
    if(convertView == null) 
    { 
     convertView = layoutInflate.inflate(resource, parent, false); 
    } 

    TextView name = (TextView) convertView.findViewById(R.id.name); 
    RatingBar userRating = (RatingBar) convertView.findViewById(R.id.userRatingBar); 
    name.setText(String.valueOf(user.getName())); 

    float percentageNumber = ((float) user.getTotalQuestionsCorrect()/(float) user.getTotalQuestionsAnswered()) * 100; 
    int percentage = (int)percentageNumber; 
    setStars(userRating, percentage); 
    convertView.setId(user.getUserId()); 
    return convertView; 
} 
+0

嗨CaseyB,懂了工作,原來它是從我用getChildAt而非getItemAtPosition,還是,你的解釋是非常有益的:)我的主要活動範圍內的問題 – Draynaa 2012-02-11 09:42:19

0

覆蓋的getCount將()方法,並返回列表的長度。

public class UserListView extends ArrayAdapter<User>{ 
    int resource; 
    Context context; 
    String response; 
    List<User> users; 

    public UserListView(Context context, int resource, List<User> users){ 
     super(context,resource,users); 
     this.resource=resource; 
     this.users =users 
     } 

    @Override 
    public int getCount() { 
     return users.length; 

     } 

    } 
相關問題