更新片段的列表视图
Updating listview on fragment
我有一个 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);
}
}
///回答
我找到答案了!我在我的服装适配器中添加了以下代码行,并在外部将其称为 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();
我有一个 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);
}
}
///回答
我找到答案了!我在我的服装适配器中添加了以下代码行,并在外部将其称为 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();