我正在使用PullToRefresh
进行RecyclerView
。每次在回收器视图上显示新数据时,它都会存储在SharedPreference
中。如果互联网连接消失,我将显示来自SharedPreference
的RecyclerView
数据。当多次执行 PullToRefresh 时,来自 Recyclerview 的相同数据存储在首选项中。当 Internet 连接消失并且从首选项获取数据时,它会在 Recyclerview 中显示重复记录。如何避免这种情况?
这是用于PullToRefresh
的代码
pullRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
current.clear();
adapter.notifyDataSetChanged();
pullRefresh.setRefreshing(true);
adapter.notifyDataSetChanged();
checkInternet();
}
}, 1000);
}
});
这是checkInternet
的代码。如果互联网可用,则从网络服务中获取最新数据并存储在Preferene中,否则从首选项中获取数据
public void checkInternet(){
String NetworkStatus = biz.fyra.bookapp.utils.NetworkStatus.checkConnection(getContext());
if (NetworkStatus.equals("false")) {
current.clear();
String 1stJSON = firstStatus.getString("firstList", "");
String 2ndJSON = secondData.getString("secondListList", "");
if (!1stJSON.equals("") && !2ndJSON.equals("")) {
try {
readCachedData(1stJSON, 2ndJSON);
} catch (JSONException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
snackbar=Snackbar.make(recyclerView,"You are Offline.",
Snackbar.LENGTH_INDEFINITE).setAction("Retry", new View.OnClickListener() {
@Override
public void onClick(View v) {
checkInternet();
}
});
snackbar.show();
}else{
current.clear();
getData();
}
}
getData
是实际的 Web 服务调用。如何解决这个问题?
解决方案:
只需添加此行:
adapter.notifyDataSetChanged();
在下面提到的(写在这里(:
public void checkInternet(){
String NetworkStatus = biz.fyra.bookapp.utils.NetworkStatus.checkConnection(getContext());
if (NetworkStatus.equals("false")) {
current.clear();
........... (Write here)
String 1stJSON = firstStatus.getString("firstList", "");
String 2ndJSON = secondData.getString("secondListList", "");
......
......
试试吧。
还有一件事,
pullRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
current.clear();
adapter.notifyDataSetChanged();
pullRefresh.setRefreshing(true);
adapter.notifyDataSetChanged();
checkInternet();
}
}, 1000);
}
});
在上面的代码中删除adapter.notifyDataSetChanged();
中的任何一个
无需添加两次。