我有ListView
,其上已实施SwipeRefreshLayout
。我想要做的是在用户滑动时更新ListView
。我试过寻找不同的选择但不幸的是我无法找到解决方案。
重新加载Fragment
或onCreate
功能会更好吗?
这是我的代码
public class NewsTab extends Fragment implements OnRefreshListener{
final LinkedList<News> listnews = new LinkedList<News>();
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.news_tab, container, false);
swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh_layout);
swipeRefreshLayout.setOnRefreshListener(this);
newslist = (ListView) view.findViewById(R.id.displaynews);
populatelist(listnews);
adapter = new CustomAdapter(getActivity(),listnews);
newslist.setAdapter(adapter);
return view;
}
public void onRefresh() {
swipeRefreshLayout.setRefreshing(true);
new StartNewsLoad().execute("");
}
private class StartNewsLoad extends AsyncTask<String, Void, String> {
//ProgressDialog pd = null;
protected String doInBackground(String... params) {
reloadNews();
loadTopNews();
//NewsTab.listnews = new LinkedList<News>();
return null;
}
protected void onPostExecute(String result) {
adapter = new CustomAdapter(getActivity(),listnews);
adapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
}
}
/// ANSWER
我找到了答案!我在服装适配器中添加了以下代码行,并在外部调用它作为adapter.refresh();
public void refresh(LinkedList<News> newsList)
{
this.results = newsList;
notifyDataSetChanged();
}
谢谢大家的帮助!
答案 0 :(得分:1)
首先不需要在onPostExecute()
中再次创建适配器,因为您已经在onCreateView()
中初始化了它。您只需要通知适配器&#34; listnews&#中的更改34;如果已更改。请在调用notifyDataSetChanged()
之前确保列表实际更改。
另外请使用调试器或日志来检查你的onRefresh()
是否被调用。从我看到的方式来看,它应该被@override注释覆盖,因为它是你的片段实现的接口的方法( swipeRefreshLayout.setOnRefreshListener(this);
)。应该是这样的:
@Override
public void onRefresh() {
swipeRefreshLayout.setRefreshing(true);
new StartNewsLoad().execute("");
}
答案 1 :(得分:1)
在onCreateView()中使用监听器初始化listview和swiperefereshLayout,并将适配器设置为列表视图,就像那样---&gt;
if(adapter==null&& listNews==null){
listnews=new ArrayList<object>();
adapter=new CustomAdapter(getActivity(),listnews);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();}
else{
listView.setAdapter(adapter);}
这样它还可以处理保留listData onOrientationchange。
和当您通过滑动布局获得api响应或referesh listview时,不要创建新适配器只需将listNews添加到您的适配器并调用adapter.notifyDataSetChanged();