/*
* Copyright (c) 2015. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
* Vestibulum commodo. Ut rhoncus gravida arcu.
*/
package com.shaweibo.biu.ui.timeline;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.shaweibo.biu.R;
import com.shaweibo.biu.Utils.Settings;
import com.shaweibo.biu.adapter.comments.DividerItemDecoration;
import com.shaweibo.biu.adapter.timeline.BaseTimelinAdapter;
import com.shaweibo.biu.dao.timeline.ITimelineBaseDao;
import com.shaweibo.biu.ui.common.BaseFragment;
import com.shaweibo.biu.ui.main.MainActivity;
import com.shaweibo.biu.ui.common.StatusContextMenuManager;
import butterknife.ButterKnife;
import butterknife.InjectView;
public abstract class AbsTimeLineFragment extends BaseFragment implements
SwipeRefreshLayout.OnRefreshListener, MainActivity.MainRefresh {
private static final String TAG = AbsTimeLineFragment.class.getSimpleName();
@InjectView(R.id.home_timeline)
protected RecyclerView mList;
private BaseTimelinAdapter mAdapter;
private LinearLayoutManager mManager;
protected ITimelineBaseDao mDao;
private Settings mSettings;
// Pull To Refresh
protected SwipeRefreshLayout mSwipeRefresh;
private boolean mRefreshing = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mSettings = Settings.getInstance(getActivity().getApplicationContext());
final View v = inflater.inflate(R.layout.fragment_timeline, null);
ButterKnife.inject(this, v);
mDao = bindDao();
mDao.loadFromCache();
mList.setDrawingCacheEnabled(true);
mList.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
mList.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE
| ViewGroup.PERSISTENT_SCROLLING_CACHE);
mList.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL_LIST));
mManager = new LinearLayoutManager(getActivity());
mList.setLayoutManager(mManager);
// Swipe To Refresh
bindSwipeToRefresh(getActivity(),(ViewGroup) v);
if (isFirstCreate) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
onRefresh();
}
}, 500);
}
mAdapter= bindListAdapter();
mList.setAdapter(mAdapter);
mList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
//获取最后一个完全显示的ItemPosition
int lastVisibleItem = mManager.findLastCompletelyVisibleItemPosition();
int totalItemCount = mManager.getItemCount();
// 判断是否滚动到底部,并且是向右滚动
if (lastVisibleItem == (totalItemCount - 1)) {
//加载更多功能的代码
new AbsTimeLineFragment.Refresher().execute(false);
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
StatusContextMenuManager.getInstance().onScrolled(recyclerView, dx, dy);
}
});
return v;
}
@Override
public void doRefresh() {
mList.scrollToPosition(0);
mList.post(new Runnable() {
@Override
public void run() {
onRefresh();
}
});
}
@Override
public void onRefresh() {
if (!mRefreshing) {
if (mSwipeRefresh != null) {
mSwipeRefresh.setRefreshing(true);
}
new Refresher().execute(true);
}
}
protected void bindSwipeToRefresh(Context context,ViewGroup v) {
mSwipeRefresh = new SwipeRefreshLayout(context);
// Move child to SwipeRefreshLayout, and add SwipeRefreshLayout to root
// view
v.removeViewInLayout(mList);
v.addView(mSwipeRefresh, ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
mSwipeRefresh.addView(mList, ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
mSwipeRefresh.setOnRefreshListener(this);
mSwipeRefresh.setColorSchemeResources(R.color.ptr_green, R.color.ptr_orange,
R.color.ptr_red, R.color.ptr_blue);
}
protected void load(boolean param) {
mDao.load(param);
mDao.cache();
}
private class Refresher extends AsyncTask<Boolean, Void, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mRefreshing = true;
}
@Override
protected Boolean doInBackground(Boolean... params) {
load(params[0]);
return params[0];
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
// if (result) {
// mList.smoothScrollToPosition(0);
// }
mAdapter.setBottomStatus(mDao.getStatus());
mAdapter.notifyDataSetChangedAfeterReadSetting();
mRefreshing = false;
if (mSwipeRefresh != null) {
mSwipeRefresh.setRefreshing(false);
}
}
}
public void setSwipeRefreshEnable(boolean isEnable){
if(mSwipeRefresh==null){
return;
}
mSwipeRefresh.setEnabled(isEnable);
}
protected abstract ITimelineBaseDao bindDao();
protected abstract BaseTimelinAdapter bindListAdapter();
}