的Android - NullPointerException异常上的ListView滚动
问题描述:
遇到一些麻烦我的自定义列表视图..的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);}
}
}
任何帮助将感谢感谢:)
答
有很多怪异的东西在你的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;
}
答
覆盖的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;
}
}
嗨CaseyB,懂了工作,原来它是从我用getChildAt而非getItemAtPosition,还是,你的解释是非常有益的:)我的主要活动范围内的问题 – Draynaa 2012-02-11 09:42:19