【发布时间】:2015-12-08 20:02:03
【问题描述】:
所以,我有一些我认为远非很好的代码,但现在我有一个特别有趣的问题。
我使用 PkRSS 来填充列表。每次我来回更改 Fragment 时,List 都会在顶部添加新获取的项目,即使我在填充之前调用 Collections.emptyList()。
代码如下:
public class UpcommingFragment extends Fragment {
public static final String rss = "XYZ.RSS";
public static List<Article> rssItems = Collections.emptyList();
public RecyclerAdapter recAdapter;
private RecyclerView recList;
public UpcommingFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.recycler, container, false);
recList = (RecyclerView) rootView.findViewById(R.id.recyclerview);
// recList.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
llm.setOrientation(LinearLayoutManager.VERTICAL);
recList.setLayoutManager(llm);
recList.setItemAnimator(new DefaultItemAnimator());
recAdapter = new RecyclerAdapter(rssItems);
recList.setAdapter(recAdapter);
recList.addOnItemTouchListener(
new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Article a;
a = rssItems.get(position);
String date = a.getDescription().substring(0, 12);
String uri = String.valueOf(a.getSource());
Intent i = new Intent(getActivity(), EventDetailActivity.class);
i.putExtra("date", date);
i.putExtra("head", a.getTitle());
i.putExtra("url", uri);
startActivity(i);
}
})
);
new RSSget().execute();
return rootView;
}
public void onDestroy() {
super.onDestroy();
rssItems = Collections.emptyList();
}
public boolean isOnline() {
ConnectivityManager connectivity = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (NetworkInfo anInfo : info)
if (anInfo.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
return false;
}
// AsyncTask
private class RSSget extends AsyncTask<Void, Void, Void> {
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
try {
rssItems = Collections.emptyList();
rssItems = PkRSS.with(getActivity()).load(rss).get();
Log.e("LISTCOUNTER", String.valueOf(rssItems.size()));
} catch (Exception e) {
Log.i("Error", "eror");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
recAdapter = new RecyclerAdapter(rssItems);
recList.setAdapter(recAdapter);
}
}
public void onResume() {
super.onResume();
}
}
这是 LogCat
09-12 11:33:08.050 23259-23329/com.mikebdev.douala E/LISTCOUNTER﹕ 12
09-12 11:33:11.701 23259-23306/com.mikebdev.douala E/LISTCOUNTER﹕ 24
09-12 11:33:15.017 23259-23323/com.mikebdev.douala E/LISTCOUNTER﹕ 36
如您所见,每次我来回更改片段时,列表都会在顶部添加这 12 个元素。
当然,如果您发现我可以在这段代码中做得更好,我将不胜感激
如果您需要查看其他内容,请告诉我。
提前致谢
【问题讨论】:
标签: android list android-fragments android-asynctask