更新片段上的列表视图

时间:2016-06-07 03:54:43

标签: android listview swiperefreshlayout

我有ListView,其上已实施SwipeRefreshLayout。我想要做的是在用户滑动时更新ListView。我试过寻找不同的选择但不幸的是我无法找到解决方案。

重新加载FragmentonCreate功能会更好吗?

这是我的代码

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();
    }

谢谢大家的帮助!

2 个答案:

答案 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();