package com.diandi.demo.ui.fragment;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.TextView;
import com.diandi.demo.CustomApplication;
import com.diandi.demo.R;
import com.diandi.demo.adapter.ChannelAdapter;
import com.diandi.demo.model.diandi.OfficialDiandi;
import com.diandi.demo.util.CollectionUtils;
import com.diandi.view.ListviewButton;
import com.diandi.demo.widget.dialog.ListDialog;
import com.diandi.demo.widget.xlist.XListView;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import cn.bmob.im.task.BRequest;
import cn.bmob.im.util.BmobLog;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.datatype.BmobDate;
import cn.bmob.v3.listener.CountListener;
import cn.bmob.v3.listener.FindListener;
/**
* *******************************************************************************
* ********* Author : klob(kloblic@gmail.com) .
* ********* Date : 2014-11-29 .
* ********* Time : 11:46 .
* ********* Project name : Diandi1.18 .
* ********* Version : 1.0
* ********* Copyright @ 2014, klob, All Rights Reserved
* *******************************************************************************
*/
public class ChannelFragment extends BaseFragment implements XListView.IXListViewListener, AdapterView.OnItemClickListener {
private final static String CHANNEL_LIST = "channel_list_";
private ListviewButton mListviewButton;
private XListView mListView;
private ArrayList<OfficialDiandi> mListItems;
private ChannelAdapter mAdapter;
private BmobQuery<OfficialDiandi> mQuery;
private TextView mNetworkTips;
private int mPageNum;
private String mChannel;
public ChannelFragment() {
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
findView();
initView();
bindEvent();
}
public void setCurrentChannel(String channel) {
mChannel = channel;
}
@Override
void initView() {
mPageNum = 0;
mListItems = new ArrayList<OfficialDiandi>();
setCurrentChannel("全部");
if (CustomApplication.getInstance().getCache().getAsObject(CHANNEL_LIST + mChannel) != null) {
mListItems = (ArrayList<OfficialDiandi>) CustomApplication.getInstance().getCache().getAsObject(CHANNEL_LIST + mChannel);
mNetworkTips.setVisibility(View.INVISIBLE);
}
mQuery = new BmobQuery<OfficialDiandi>();
mQuery.order("-createdAt");
mQuery.setLimit(BRequest.QUERY_LIMIT_COUNT);
mQuery.include("author");
initXListView();
}
public void changeChannel(String channel) {
setCurrentChannel(channel);
mListItems = new ArrayList<OfficialDiandi>();
mPageNum = 0;
if (CustomApplication.getInstance().getCache().getAsObject(CHANNEL_LIST) != null) {
mListItems = (ArrayList<OfficialDiandi>) CustomApplication.getInstance().getCache().getAsObject(CHANNEL_LIST + mChannel);
mNetworkTips.setVisibility(View.GONE);
}
mQuery = new BmobQuery<OfficialDiandi>();
mQuery.order("-createdAt");
mQuery.setLimit(BRequest.QUERY_LIMIT_COUNT);
if (!channel.equals("大全"))
mQuery.addWhereEqualTo(OfficialDiandi.CHANNEL, channel);
mQuery.include("author");
initXListView();
}
@Override
void findView() {
mListView = (XListView) findViewById(R.id.fragment_diandi_listview);
mNetworkTips = (TextView) findViewById(R.id.fragment_dianndi_networktips);
mListviewButton = (ListviewButton) findViewById(R.id.buttonFloat);
mListviewButton.attachToListView(mListView);
mListviewButton.setDrawableIcon(getResources().getDrawable(R.drawable.base_action_bar_more_bg_n));
}
@Override
void bindEvent() {
mListView.setOnItemClickListener(this);
mListviewButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final ArrayList<String> list = new ArrayList<String>();
list.add("大全");
list.add("网阅");
list.add("应用");
list.add("娱乐");
list.add("好书");
final ListDialog listDialog = new ListDialog(getActivity(), "操作", list);
listDialog.show();
listDialog.setOnListItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
changeChannel(list.get(i));
listDialog.dismiss();
}
});
}
});
/* DiandiFragment.getMoreBtn().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
*//* ChannelPopWindow channelPopWindow = new ChannelPopWindow(getActivity());
channelPopWindow.showPopupWindow(mMoreBtn);*//*
TitlePop titlePop = new TitlePop(getActivity(), ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
titlePop.addAction(new ActionItem(getActivity(), "网阅", R.drawable.internet));
titlePop.addAction(new ActionItem(getActivity(), "应用", R.drawable.apk));
titlePop.addAction(new ActionItem(getActivity(), "娱乐", R.drawable.happy));
titlePop.addAction(new ActionItem(getActivity(), "好书", R.drawable.book));
titlePop.addAction(new ActionItem(getActivity(), "华科", R.drawable.hust));
titlePop.show(view);
titlePop.setItemOnClickListener(new TitlePop.OnItemOnClickListener() {
@Override
public void onItemClick(ActionItem item, int position) {
{
if (item.getTitle() != null) {
changeChannel(item.getTitle());
}
}
}
});
}
});*/
}
@Override
public void onStop() {
super.onStop();
if (mListItems != null) {
CustomApplication.getInstance().getCache().put(CHANNEL_LIST + mChannel, mListItems);
}
}
private void initXListView() {
mListView.setPullLoadEnable(false);
mListView.setPullRefreshEnable(true);
mListView.setXListViewListener(this);
// mListView.pullRefreshing();
mAdapter = new ChannelAdapter(getActivity(), mListItems);
mListView.setAdapter(mAdapter);
initChannelList(false);
}
private void initChannelList(final boolean isUpdate) {
mQuery.addWhereLessThan("createdAt", new BmobDate(new Date(System.currentTimeMillis())));
mQuery.setSkip(mPageNum * BRequest.QUERY_LIMIT_COUNT);
mQuery.findObjects(getActivity(), new FindListener<OfficialDiandi>() {
@Override
public void onSuccess(List<OfficialDiandi> list) {
mNetworkTips.setVisibility(View.INVISIBLE);
if (CollectionUtils.isNotNull(list)) {
if (isUpdate || mPageNum == 0) {
mListItems.clear();
mAdapter.setList(mListItems);
}
mListItems.addAll(list);
mAdapter.setList(mListItems);
if (list.size() < BRequest.QUERY_LIMIT_COUNT) {
mListView.setPullLoadEnable(false);
} else {
mListView.setPullLoadEnable(true);
}
} else {
if (mListItems != null) {
mListItems.clear();
}
}
if (isUpdate) {
refreshPull();
}
mPageNum = 0;
}
@Override
public void onError(int i, String s) {
// ShowToast(R.string.network_tips);
}
});
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_channel, container, false);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
}
private void refreshLoad() {
if (mListView.getPullLoading()) {
mListView.stopLoadMore();
mNetworkTips.setVisibility(View.INVISIBLE);
}
}
private void refreshPull() {
if (mListView.getPullRefreshing()) {
mListView.stopRefresh();
mNetworkTips.setVisibility(View.INVISIBLE);
}
}
@Override
public void onRefresh() {
mPageNum = 0;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
initChannelList(true);
}
}, 700);
}
@Override
public void onLoadMore() {
mQuery.count(getActivity(), OfficialDiandi.class, new CountListener() {
@Override
public void onSuccess(int i) {
if (i > mListItems.size()) {
mPageNum++;
mQuery.setSkip(BRequest.QUERY_LIMIT_COUNT * mPageNum);
mQuery.findObjects(getActivity(), new FindListener<OfficialDiandi>() {
@Override
public void onSuccess(List<OfficialDiandi> list) {
mListItems.addAll(list);
mAdapter.setList(mListItems);
refreshLoad();
}
@Override
public void onError(int i, String s) {
BmobLog.i("查询错误:" + s);
mListView.setPullLoadEnable(false);
refreshLoad();
}
});
} else {
ShowToast("暂无更多数据");
mListView.setPullLoadEnable(false);
refreshLoad();
}
}
@Override
public void onFailure(int i, String s) {
refreshLoad();
}
});
}
}