更新片段的列表视图

Updating listview on fragment

我有一个 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);
    }
}

///回答

我找到答案了!我在我的服装适配器中添加了以下代码行,并在外部将其称为 adapter.refresh();

public void refresh(LinkedList<News> newsList)
    {
        this.results = newsList;
        notifyDataSetChanged();
    }

谢谢大家的帮助!

首先,无需在 onPostExecute() 中再次创建适配器,因为您已经在 onCreateView() 中对其进行了初始化。您只需将 [=20= 中的更改通知适配器即可] 如果它有 changed.Make 请确保您的列表在调用 notifyDataSetChanged().

之前确实发生了变化

另外请使用调试器或日志来检查您的 onRefresh() 是否被调用或 not.From 我看到的方式,它应该被 @override 注释覆盖,因为它是接口实现的方法通过你的片段(swipeRefreshLayout.setOnRefreshListener(this);)。它应该像:

@Override
public void onRefresh() {
    swipeRefreshLayout.setRefreshing(true);
    new StartNewsLoad().execute("");
    }

在 onCreateView() 中使用侦听器初始化您的列表视图和 swiperefereshLayout 并将您的适配器设置为您的列表视图 --->

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 响应或使用滑动布局引用列表视图时,不要创建新的适配器,只需将 listNews 添加到您的适配器并调用 adapter.notifyDataSetChanged();