package cn.daixiaodong.myapp.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.avos.avoscloud.AVAnalytics;
import com.avos.avoscloud.AVException;
import com.avos.avoscloud.AVObject;
import com.avos.avoscloud.AVQuery;
import com.avos.avoscloud.AVUser;
import com.avos.avoscloud.FindCallback;
import com.melnykov.fab.FloatingActionButton;
import java.util.ArrayList;
import java.util.List;
import cn.daixiaodong.myapp.R;
import cn.daixiaodong.myapp.activity.AssociationTopicActivity_;
import cn.daixiaodong.myapp.activity.IdeaDetailActivity_;
import cn.daixiaodong.myapp.activity.PublishIdeaActivity_;
import cn.daixiaodong.myapp.activity.SignInActivity;
import cn.daixiaodong.myapp.activity.SignInActivity_;
import cn.daixiaodong.myapp.adapter.IdeaAdapter;
import cn.daixiaodong.myapp.config.Constants;
import cn.daixiaodong.myapp.fragment.common.BaseFragment;
import cn.daixiaodong.myapp.utils.NetworkUtil;
/**
* 所有的idea列表
*/
public class IdeaListFragment extends BaseFragment {
private View mView;
private RecyclerView mIdeaRecyclerView;
private List<AVObject> mData;
IdeaAdapter mAdapter;
private SwipeRefreshLayout mSwipeRefreshLayout;
private int mLastVisibleItem;
private int mOffset;
private int mPager = 1;
private int topicNum = 0;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.fragment_idea_list, container, false);
return mView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setUpRecyclerView();
setUpSwipeRefreshLayout();
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(true);
loadData(true);
}
});
}
private void setUpSwipeRefreshLayout() {
mSwipeRefreshLayout = (SwipeRefreshLayout) mView.findViewById(R.id.id_srl_refresh_data);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadData(true);
}
});
}
private void loadData(final boolean isRefresh) {
AVQuery<AVObject> query1 = new AVQuery<>("idea");
query1.whereEqualTo("tag", 1);
query1.findInBackground(new FindCallback<AVObject>() {
@Override
public void done(List<AVObject> list, AVException e) {
if (e == null) {
if (isRefresh) {
mData.clear();
}
topicNum = list.size();
mData.addAll(0, list);
//mAdapter.notifyDataSetChanged();
loadNotTopicData(isRefresh);
}
}
});
}
private void loadNotTopicData(final boolean isRefresh) {
final AVQuery<AVObject> query = new AVQuery<>("idea");
query.whereNotEqualTo("tag", 1);
query.orderByDescending("createdAt");
query.setLimit(1);
query.include("user");
if (!isRefresh) {
query.whereLessThan("ideaId", mOffset);
}
query.setCachePolicy(AVQuery.CachePolicy.NETWORK_ELSE_CACHE);
query.findInBackground(new FindCallback<AVObject>() {
@Override
public void done(List<AVObject> list, AVException e) {
mSwipeRefreshLayout.setRefreshing(false);
if (e == null) {
if (!list.isEmpty()) {
for (AVObject object : list) {
int id = object.getInt("ideaId");
Log.i("id--->", id + "");
}
mOffset = list.get(list.size() - 1).getInt("ideaId");
Log.i("mOffset", mOffset + "");
if (isRefresh) {
mData.addAll(topicNum, list);
} else {
mData.addAll(list);
mPager++;
}
mAdapter.notifyDataSetChanged();
if (!NetworkUtil.isNetworkConnected(getActivity())) {
showToast(getActivity(), "网络错误");
}
} else {
showToast(getActivity(), "没有更多数据了");
}
} else {
e.printStackTrace();
if (e.getCode() == AVException.CACHE_MISS) {
}
}
}
});
}
private void setUpRecyclerView() {
mIdeaRecyclerView =
(RecyclerView) mView.findViewById(R.id.id_rv_idea_recycler_view);
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
mIdeaRecyclerView.setLayoutManager(linearLayoutManager);
mData = new ArrayList<>();
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
float scale = getResources().getDisplayMetrics().density;
mAdapter = new IdeaAdapter(getActivity(), mData);
mAdapter.setImageSize(width, scale);
mIdeaRecyclerView.setHasFixedSize(false);
mIdeaRecyclerView.setItemAnimator(new DefaultItemAnimator());
mIdeaRecyclerView.setAdapter(mAdapter);
mIdeaRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE
&& linearLayoutManager.findLastVisibleItemPosition() + 1 == mAdapter.getItemCount()) {
if (!mSwipeRefreshLayout.isRefreshing()) {
mSwipeRefreshLayout.setRefreshing(true);
loadNotTopicData(false);
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
mSwipeRefreshLayout.setEnabled(linearLayoutManager
.findFirstCompletelyVisibleItemPosition() == 0);
}
});
FloatingActionButton fab = (FloatingActionButton) mView.findViewById(R.id.id_fab_floating_action_button);
fab.attachToRecyclerView(mIdeaRecyclerView);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 事件统计
// 判断是否登录
AVAnalytics.onEvent(getActivity(), "user_create_idea");
if (AVUser.getCurrentUser() == null) {
// 子Fragment无法取得传回的数据,父Fragment以及宿主Activity可以取得,此处通过父Fragment取得数据
// 参考:http://www.tuicool.com/articles/2eM32a
SignInActivity_.intent(getParentFragment()).startForResult(SignInActivity.SIGN_IN_REQUEST_CODE);
} else {
PublishIdeaActivity_.intent(getActivity()).start();
}
}
});
mAdapter.setOnItemClickListener(new IdeaAdapter.OnItemClickListener() {
@Override
public void onItemClick(IdeaAdapter.MyViewHolder viewHolder, int pos) {
int tag = mData.get(pos).getInt("tag");
if (tag == Constants.TOPIC) {
String tagName = mData.get(pos).getString("tagName");
if (Constants.ASSOCIATION_TOPIC.equals(tagName)) {
Intent intent = new Intent(getActivity(), AssociationTopicActivity_.class);
startActivity(intent);
}
} else {
String objectId = mData.get(pos).getObjectId();
String title = mData.get(pos).getString("title");
IdeaDetailActivity_.intent(getActivity()).objectId(objectId).title(title).start();
}
}
});
}
}