应用程序崩溃时,无尽的列表视图是滚动
我有一个片段类,其中我使用asynctask加载列表视图数据。 一旦用户到达滚动结束,我需要加载另一组数据,我正在做这件事。应用程序崩溃时,无尽的列表视图是滚动
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (userListAdapter == null)
return;
if (userListAdapter.getCount() == 0)
return;
int l = visibleItemCount + firstVisibleItem;
if (l >= totalItemCount && !isLoading) {
// It is time to add new data. We call the listener
listView.addFooterView(footer);
isLoading = true;
listener.loadData();
}
}
});
我loaddata得到回调这里
@Override
public void loadData() {
if (connection != null) {
connection.getmService().new FetchJsonData().execute(Constants.WEEK_URL1);
}
}
我的适配器代码。
public class UserListAdapter extends BaseAdapter {
private LayoutInflater layoutInflater;
private ArrayList<UserInfoModel> userInfoModelArrayList;
public UserListAdapter(Context context, ArrayList<UserInfoModel> userInfoModelArrayList) {
this.userInfoModelArrayList = userInfoModelArrayList;
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return userInfoModelArrayList.size();
}
@Override
public Object getItem(int position) {
return userInfoModelArrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (null == convertView) {
convertView = layoutInflater.inflate(R.layout.list_row, parent,false);
viewHolder = new ViewHolder();
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.image_view);
viewHolder.userName = (TextView) convertView.findViewById(R.id.user_name);
viewHolder.userID = (TextView) convertView.findViewById(R.id.userID);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.userName.setText(userInfoModelArrayList.get(position).getUserName());
viewHolder.userID.setText(userInfoModelArrayList.get(position).getUserID());
return convertView;
}
public void setFilter(ArrayList<UserInfoModel> informationArrayList) {
userInfoModelArrayList = new ArrayList<>();
userInfoModelArrayList.addAll(informationArrayList);
notifyDataSetChanged();
}
public void setData(ArrayList<UserInfoModel> informationArrayList) {
userInfoModelArrayList.addAll(informationArrayList);
notifyDataSetChanged();
}
private static class ViewHolder {
ImageView imageView;
TextView userName;
TextView userID;
}
}
但我的应用程序崩溃,一旦达到第一套我已经在列表视图的页脚添加进度数据。
错误日志
02-19 18:45:09.757 3114-3114/example.service.android.santosh.com.androidservice E/AndroidRuntime: FATAL EXCEPTION: main
Process: example.service.android.santosh.com.androidservice, PID: 3114
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
at android.widget.AbsListView.obtainView(AbsListView.java:2363)
at android.widget.ListView.makeAndAddView(ListView.java:1876)
at android.widget.ListView.fillDown(ListView.java:702)
at android.widget.ListView.fillGap(ListView.java:666)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5060)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4608)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:603)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
请帮助谢谢:)
我已经解决了这个问题与adpater无关,这是由于在listview页脚视图的滚动中添加页脚视图应该添加在片段的创建上。
的onCreate
View footerView = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.loading_view, null, false);
listView.addFooterView(footerView);
onScroll
if (l >= totalItemCount && !isLoading) {
// It is time to add new data. We call the listener
isLoading = true;
listener.loadData();
}
它解决了我的问题。顺便说一句,谢谢大家:)
啊!对,你在footScroll()中附加了footerView。达姆,我不应该错过这一点。无论如何,感谢您的信息。 –
您是否尝试过这样的事情...
MyViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
viewHolder = new MyViewHolder();;
convertView = inflater.inflate(R.layout.all_brands_layout_search, null);
viewHolder.imageOne = (DynamicHeightImageView) convertView.findViewById(R.id.my_brand_pinrest_view);
convertView.setTag(viewHolder);
}else{
viewHolder= (MyViewHolder)convertView.getTag();
}
这应该是写一个适配器的理想方式。
不帮助兄弟仍然同样的崩溃。 –
看来你的getCount()或getItemId(int pos)有问题。你能否发布适配器代码以获得更多清晰的内容。 ? –
已添加完整的适配器代码。 –
你可以请张贴堆栈跟踪以及。 ?这对确定问题将有很大帮助。 –
当然我会给我一个 –
请张贴与getImportantForAccessibility方法相关的代码,即如何调用它和方法本身。 –