public class RvList extends BaseFragment {
private boolean isConnected;
public RecyclerView mRecyclerView;
private FloatingActionButton floatingActionButton;
private SwipeRefreshLayout swipeRefreshWidget;
private RvAdapter adapter;
@Override
protected View initView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.viewpager_rv, container, false);
mRecyclerView = (RecyclerView) view.findViewById(R.id.rv);
swipeRefreshWidget = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh_widget);
swipeRefreshWidget.setColorSchemeResources(R.color.colorPrimaryDark, R.color.colorAccent,R.color.colorPrimary);//setColorSchemeResources():设置进度条的颜色主题,最多设置四种
floatingActionButton = (FloatingActionButton) view.findViewById(R.id.fab);//FloatingActionButton的Id
floatingActionButton.setOnClickListener(new View.OnClickListener() {//FAB的点击事件
@Override
public void onClick(View v) {
mRecyclerView.smoothScrollToPosition(0);
}
});
mRecyclerView.setLayoutManager(new LinearLayoutManager(mActivity,LinearLayoutManager.VERTICAL,false));
return view;
}
@Override
protected void initData() {
isConnected = Utility.checkNetworkConnection(mActivity);
adapter = new RvAdapter(mActivity);
swipeRefreshWidget.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (isConnected) {
new LoadNewsTask(adapter).execute();
Toast.makeText(mActivity, "刷新完成", Toast.LENGTH_SHORT).show();
swipeRefreshWidget.setRefreshing(false);
} else {
Utility.noNetworkAlert(mActivity);
swipeRefreshWidget.setRefreshing(false);//设置SwipeRefreshLayout当前是否处于刷新状态,一般是在请求数据的时候设置为true,在数据被加载到View中后,设置为false。
}
}
},1000);
}
});
/* if (isConnected) new LoadNewsTask(adapter).execute();
else Utility.noNetworkAlert(mActivity);*/
mRecyclerView.setAdapter(adapter);
}
}
注:initView
在onCreateView
中 initData
在onActivityCreated
当中
注释掉的那两句话
if (isConnected) new LoadNewsTask(adapter).execute();
else Utility.noNetworkAlert(mActivity);
之前可以完美允许
但是想添加个SwipeRefreshLayout进行下拉刷新后的加载 但是 Toast打印出来了就是加载不出来数据
请问有人知道什么缘故吗
加入完資料之後呼叫adapter.notifyiteminserted()才能顯示出來
你要明白
new Handler().postDelayed()
的原理,它只是一个定时任务,根据你的设置postDelayed()
中的代码只是延迟了1秒执行,但程序先执行的还是mRecyclerView.setAdapter(adapter);
所以此时你要加载的数据还没有进行加载。就更别说更新数据了。你应该把mRecyclerView.setAdapter(adapter);
放到postDelayed()
中。此外網路請求都是費時的,需要是非同步執行,要更新資料都是在取得資料成功後的回呼方法中執行。
你在Toast下面加一句 notifiydatasetchanged 就可以了,樓上的答案也是正確的。非同步操作 直接new Thread 就行了 別用這個new Handler().postDelayed()了。
adapter的資料沒有刷新,主線程分開一個線程執行post,但是主線程不會停下來,在子線程執行Post的時候,他其實已經執行過setadapter了。但是當時數據還沒回來。
在這裡面 LoadNewsTask 更新adapter就行了
即使你沒有用handler.post 那兩句話沒有註釋掉 也不一定是完美運行的。如果網路資料要求過慢,資料同樣不一定會顯示。