package cn.edu.njupt.allgo.fragment.child;
import java.io.Serializable;
import java.util.ArrayList;
import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshAttacher;
import com.haarman.listviewanimations.swinginadapters.prepared.SwingBottomInAnimationAdapter;
import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.bitmap.PauseOnScrollListener;
import cn.edu.njupt.allgo.R;
import cn.edu.njupt.allgo.activity.AddEventACTIVITY;
import cn.edu.njupt.allgo.activity.EventPageACTIVITY;
import cn.edu.njupt.allgo.activity.FilterACTIVITY;
import cn.edu.njupt.allgo.activity.HomeACTIVITY;
import cn.edu.njupt.allgo.adapter.EventCardsAdapter;
import cn.edu.njupt.allgo.logic.CommonEventLogic;
import cn.edu.njupt.allgo.logic.RefreshInterFace;
import cn.edu.njupt.allgo.logicImpl.CommonEventLogicImpl;
import cn.edu.njupt.allgo.util.ArrayListUtil;
import cn.edu.njupt.allgo.util.ImageUtil;
import cn.edu.njupt.allgo.vo.EventVo;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
public class CommonEventFRAGMENT extends BaseChildFRAGMENT implements PullToRefreshAttacher.OnRefreshListener ,
RefreshInterFace {
private int page = 1;
private EventCardsAdapter eventcardsAdapter;
private PullToRefreshAttacher mPullToRefreshAttacher;
private SwingBottomInAnimationAdapter swingBottomInAnimationAdapter;
private View moreView;
private ListView listView;
private ArrayList<EventVo> eventsData =new ArrayList<EventVo>() ; //要放在listview的内容
private boolean listflag = false ; //保证上滑刷新的线程同时只开启一个
private boolean listfootflag = false ; ////保证页脚只有一个
private CommonEventLogic commonEventLogic ;
private ImageUtil imageUtils;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
commonEventLogic = new CommonEventLogicImpl(getActivity() , CommonEventFRAGMENT.this) ;
commonEventLogic.initEvent();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreateView(inflater, container, savedInstanceState) ;
setFragmentFlag("CommonEventFRAGMENT");
View view = inflater.inflate(R.layout.fragment_event, null);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setView();
}
private void setView() {
listView = (ListView)getView().findViewById(R.id.listView_event);
mPullToRefreshAttacher = ((HomeACTIVITY)getActivity())
.getPullToRefreshAttacher();
mPullToRefreshAttacher.addRefreshableView(listView, this);
imageUtils = new ImageUtil(getActivity());
listView.setOnScrollListener(new PauseOnScrollListener(imageUtils, false, true));
eventcardsAdapter = new EventCardsAdapter(getActivity(),eventsData,imageUtils);
swingBottomInAnimationAdapter = new SwingBottomInAnimationAdapter(eventcardsAdapter);
swingBottomInAnimationAdapter.setInitialDelayMillis(300);
swingBottomInAnimationAdapter.setAbsListView(listView);
moreView = getLayoutInflater(getArguments()).inflate(R.layout.list_eventlistview_load, null);
listView.addFooterView(moreView); //添加底部view,一定要在setAdapter之前添加,否则会报错。
listView.setAdapter(swingBottomInAnimationAdapter);
listView.removeFooterView(moreView);
//点击事件
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO 点击方法
/*Toast.makeText( getActivity(),
"点击了==》"+eventcardsAdapter.getItem(arg2).uname,
Toast.LENGTH_SHORT).show();*/
Intent intent = new Intent(getActivity(),EventPageACTIVITY.class);
Bundle bundle = new Bundle();
bundle.putSerializable("EventData", eventcardsAdapter.getItem(arg2));
intent.putExtras(bundle);
startActivity(intent);
}
});
listView.setOnScrollListener(new OnScrollListener() {
int lastItem ;
int totalItemCount ;
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
lastItem = firstVisibleItem + visibleItemCount ;
this.totalItemCount = totalItemCount ;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//下拉到空闲时,且最后一个item的数等于数据的总数时,进行更新
if(lastItem == totalItemCount && scrollState == OnScrollListener.SCROLL_STATE_IDLE){
//Log.i("Debug", "拉到最底部");
if(!(listfootflag)) {
listView.addFooterView(moreView);
}
if((!(listflag))&&listfootflag) {
//Log.i("Debug", "=listflag=>" + listflag + "=listfootflag=>" + listfootflag);
listflag = true ;
moreView.setVisibility(View.VISIBLE);
commonEventLogic.getEvent(page, 15, null, null, null, null);
}else {
listfootflag = true ;
}
}
}});
}
@Override
public void onRefreshStarted(View view) {
if (!(listflag)) {
listflag = true ;
commonEventLogic.getEvent(1, 15, null, null, null, null);
}else {
mPullToRefreshAttacher.setRefreshComplete();
Toast.makeText( getActivity(), "正在刷新",Toast.LENGTH_SHORT ).show();
}
}
//添加actionbar菜单
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO 添加actionbar菜单
MenuItem actionItem1 = menu.add("筛选");
actionItem1.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
actionItem1.setIcon(R.drawable.ic_action_view_as_list);
MenuItem actionItem2 = menu.add("组织活动");
actionItem2.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
actionItem2.setIcon(R.drawable.ic_action_new_label);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getTitle().equals("筛选")) {
showFilter();
return true ;
}
if(item.getTitle().equals("组织活动")) {
showAddEvent() ;
return true ;
}
return super.onOptionsItemSelected(item);
}
void showFilter() {
//TODO 显示筛选器
Intent intent = new Intent(getActivity(), FilterACTIVITY.class);
startActivity(intent);
}
void showAddEvent() {
Intent intent = new Intent(getActivity(), AddEventACTIVITY.class);
startActivity(intent);
}
@Override
public void saveData() {
commonEventLogic.saveEvent(eventsData);
}
/**
* 用于刷新
*/
@SuppressWarnings("unchecked")
@Override
public void refresh(Object result , int kind) {
switch(kind){
case 1: //初始化
if(result != null){
eventsData.addAll(0,(ArrayList<EventVo>)result);
ArrayListUtil.removeDuplicate(eventsData);
ArrayListUtil.sortEventVo(eventsData);
eventcardsAdapter.notifyDataSetChanged();
}
break;
case 2: //下拉刷新
eventsData.addAll(0,(ArrayList<EventVo>)result);
ArrayListUtil.removeDuplicate(eventsData);
ArrayListUtil.sortEventVo(eventsData);
//int count = result.size();
if(page == 1){page++;}
eventcardsAdapter.notifyDataSetChanged();
mPullToRefreshAttacher.setRefreshComplete();
if(listfootflag){
listView.removeFooterView(moreView); //移除底部视图
listfootflag = false ;
}
listflag =false ;
break;
case 3: //底部刷新
eventsData.addAll((ArrayList<EventVo>)result);
ArrayListUtil.removeDuplicate(eventsData);
ArrayListUtil.sortEventVo(eventsData);
eventcardsAdapter.notifyDataSetChanged();
moreView.setVisibility(View.GONE);
page++;
listView.removeFooterView(moreView); //移除底部视图
listfootflag = false ;
listflag = false ;
break;
case -1 :
Toast.makeText(getActivity(), (String)result, Toast.LENGTH_SHORT).show();
if(mPullToRefreshAttacher.isRefreshing()){
mPullToRefreshAttacher.setRefreshComplete();
}
if(listfootflag){
listView.removeFooterView(moreView); //移除底部视图
listfootflag = false ;
}
listflag =false ;
break;
}
}
public void deleteEvent(EventVo event) {
eventsData.remove(event);
Log.i("allgo","deleteEvent"+event.toString());
eventcardsAdapter.notifyDataSetChanged();
}
}