2016-01-13 54 views
1

我尝试使用notifyDataSetChanged()刷新我的listview,但它被标记为红色。我使用像扩展适配器ListView,所以notifyDataSetChaned它应该工作,但否则。如何使用BaseAdapter刷新我的ListView

下面是我的声明ListView和ArrayList。

ListView listview; 
ArrayList<ListData> myList = new ArrayList<>(); 

设置我的列表中这样说:

listview = (ListView) findViewById(R.id.listView); 
listview.setAdapter(new MyBaseAdapter(this, myList)); 

我也setOnScrollListener使用,我想我的列表视图它时刷新SROLL_STATE = 0;

listview.setOnScrollListener(new AbsListView.OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      int position = listview.getFirstVisiblePosition(); 

      SCROLL_STATE = position; 

      if (SCROLL_STATE == 0) { 
       listview.notifyDataSetChanged(); // Here is a problem, because it's not work 
      } 

     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 

     } 
    }); 
+0

也许你应该检查你的导入的包名是你的扩展列表视图。 –

回答

2

定义一个适配器对象, MyBaseAdapter适配器=新MyBaseAdapter(此,myList中); adapter.notifyDataSetChanged();

+0

我有一个日志:调用OpenGL ES API没有当前上下文(每个线程记录一次) – SeaDog

+0

太棒了!这个日志我有,因为我创建一个堆栈活动,并在某个地方是错误的。当我开启一项活动并使用您的解决方案时,一切都是最好的。请告诉我,如何从IntentService刷新listview?我创建了公共静态MyBaseAdapter mListAdapter,并尝试从IntentService调用该方法,但我的应用程序已关闭。 – SeaDog

2

notifyDataSetChanged()BaseAdapter类的方法和的ListView类。因此,调用listView.notifyDatasSetChanged();在逻辑和语法上不正确。

替换该符合

listView.getAdapter().notifyDataSetChanged(); 

所有最好:)

+0

My BaseAdapter是公共类MyBaseAdapter的扩展“public class MyBaseAdapter extends BaseAdapter {”我尝试从其他活动调用notifyDataSetChanged()。你的例子不幸解决了我的问题。 – SeaDog

+0

我明白了。 notifyDataSetChanged()是该类的公共方法。我建议的路线是首先获取与listView关联的适配器,然后调用notifyDataSetChanged()方法重绘列表视图,如果基础数据发生任何更改(数据中的任何插入或删除)。 –

+0

我不能使用这种方法。我会解释发生了什么事。该包是从公共JSONArray创建的。在这个数组中更多的是一个JSONObject,它的工作完美。在使用带有HttpRequest的IntentService的后台下载新数据(如果存在)。当下载新数据时,全局JSONAarray会更改,但我的列表视图不会更改。现在我必须刷新listview而不创建新的活动。 – SeaDog