自定义适配器notifyDataSetChanged()导致ArrayIndexOutOfBoundsException

时间:2017-07-14 13:46:58

标签: android listview custom-adapter notifydatasetchanged

我有一个通知列表视图。我需要以较短的间隔刷新listview内容。但是当我调用notifyDataSetChanged()时,滚动底部之前没有异常。滚动底部后会抛出ArrayIndexOutOfBoundsException。有我的代码:

@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
       setContentView(R.layout.activity_notification);
       init();
       runOnUiThread(new Runnable() {
           public void run() {
               adapter.notifyDataSetChanged();
               notificationsListView.postDelayed(this, 1000);
               Log.i("Checking", "...");
           }
       });
   }

Adapter.java

public class NotificationsListViewAdapter extends BaseAdapter {
   RealmResults<myNotification> notifications;
   Context context;
   public NotificationsListViewAdapter(Context context, RealmResults<myNotification> notifications){
       this.context = context;
       this.notifications = notifications;
   }
   @Override
   public int getCount() {
       Log.e("NOT SIZE ADAPTER COUNT", String.valueOf(notifications.size()));
       return notifications.size();
   }

   @Override
   public myNotification getItem(int position) {
       return notifications.get(position);
   }

   @Override
   public int getViewTypeCount() {
       Log.e("NOT SZE ADPTR VT COUNT", String.valueOf(notifications.size()));
       return notifications.size();
   }

   @Override
   public int getItemViewType(int position) {

       return position;
   }

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

   @Override
   public View getView(int position, final View convertView, ViewGroup parent) {
       View notificationsRowView = convertView;

       // i am not posting getView() it is 400 row code and im sure error is not coming from getView()

       return notificationsRowView;
   }
}

Btw初始化功能;

void init(){
     realm = Realm.getDefaultInstance();
     notifications = realm.where(myNotification.class).findAllSorted("messageID",Sort.DESCENDING);
     notificationsListView = (ListView) findViewById(R.id.notificationActivity_notificationsListView);
     adapter = new NotificationsListViewAdapter(NotificationActivity.this,notifications);
     notificationsListView.setAdapter(adapter); 
}

1 个答案:

答案 0 :(得分:0)

看来,您的代码错误地计算了适配器内的getCount()。 发布你的元素&#39;存储和适配器代码,以确保。