package cn.edu.ustc.appseed.clubseed.fragment;
import android.app.Fragment;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import com.alibaba.fastjson.JSON;
import com.daimajia.slider.library.SliderLayout;
import com.daimajia.slider.library.SliderTypes.BaseSliderView;
import com.daimajia.slider.library.SliderTypes.TextSliderView;
import cn.edu.ustc.appseed.clubseed.R;
import cn.edu.ustc.appseed.clubseed.activity.EventContentActivity;
import cn.edu.ustc.appseed.clubseed.adapter.EventListViewAdapter;
import cn.edu.ustc.appseed.clubseed.data.ListPhp;
import cn.edu.ustc.appseed.clubseed.data.GetPhp;
import cn.edu.ustc.appseed.clubseed.data.Event;
import cn.edu.ustc.appseed.clubseed.listener.EndlessScrollListener;
import cn.edu.ustc.appseed.clubseed.utils.AppUtils;
/**
* Created by Hengruo on 2015/2/26.
*/
public class NoticeFragment extends Fragment {
private BaseAdapter adapter;
private ListView mListView;
private SliderLayout mSliderLayout;
private LinearLayout mLinearLayout;
private LayoutInflater mLayoutInflater;
private SwipeRefreshLayout mSwipeRefreshLayout;
private ListPhp mListPhp;
private int listmode = 0; // 0: First load; 1: Refresh; 2: load more
private int slidermode = 0;
public static final String EXTRA_ACTIVITY_ID = "ID";
public static final String EXTRA_TITLE = "TITLE";
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_notice, container, false);
mLayoutInflater = LayoutInflater.from(getActivity());
mLinearLayout = (LinearLayout) mLayoutInflater.inflate(R.layout.header_list_events, null);
mSwipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipeContainer);
mListView = (ListView) v.findViewById(R.id.listViewEvents);
mSliderLayout = (SliderLayout) mLinearLayout.findViewById(R.id.sliderLayoutEvents);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Toast.makeText(getActivity(), "刷新中...", Toast.LENGTH_SHORT).show();
listmode = 1;
slidermode = 1;
new ListViewAsyncTask().execute(1);
new SliderAsyncTask().execute();
mSwipeRefreshLayout.setRefreshing(false);
}
});
mListView.addHeaderView(mLinearLayout);
new ListViewAsyncTask().execute(1);
new SliderAsyncTask().execute();
return v;
}
private void setEmptySliderLayout() {
for (int i = 0; i < 5; i++) {
TextSliderView mTextSliderView = new TextSliderView(getActivity());
mTextSliderView.description("").image(R.drawable.empty_slider);
mTextSliderView.getBundle().putString(EXTRA_ACTIVITY_ID, "0");
mTextSliderView.getBundle().putString(EXTRA_TITLE, "");
mTextSliderView.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() {
@Override
public void onSliderClick(BaseSliderView slider) {
int ID = Integer.parseInt(slider.getBundle().getString(EXTRA_ACTIVITY_ID));
String title = slider.getBundle().getString(EXTRA_TITLE);
Intent i = new Intent(getActivity(), EventContentActivity.class);
i.putExtra(EXTRA_ACTIVITY_ID, ID);
i.putExtra(EXTRA_TITLE, title);
startActivity(i);
}
});
mSliderLayout.addSlider(mTextSliderView);
}
}
private void setSliderLayout(GetPhp getPhp) {
for (int i = 0; i < getPhp.getData().size(); i++) {
TextSliderView mTextSliderView = new TextSliderView(getActivity());
mTextSliderView.description(getPhp.getData().get(i).getTitle()).image(getPhp.getData().get(i).getPhotoURL());
mTextSliderView.getBundle().putString(EXTRA_ACTIVITY_ID, getPhp.getData().get(i).getID());
mTextSliderView.getBundle().putString(EXTRA_TITLE, getPhp.getData().get(i).getTitle());
mTextSliderView.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() {
@Override
public void onSliderClick(BaseSliderView slider) {
int ID = Integer.parseInt(slider.getBundle().getString(EXTRA_ACTIVITY_ID));
String title = slider.getBundle().getString(EXTRA_TITLE);
Intent i = new Intent(getActivity(), EventContentActivity.class);
i.putExtra(EXTRA_ACTIVITY_ID, ID);
i.putExtra(EXTRA_TITLE, title);
startActivity(i);
}
});
mSliderLayout.addSlider(mTextSliderView);
}
}
private void setListView(ListPhp listPhp) {
adapter = new EventListViewAdapter(getActivity(), listPhp);
//must keep order of "addHeader, setAdapter, setOnXxxListener"
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Event event = (Event) parent.getItemAtPosition(position);
Intent i = new Intent(getActivity(), EventContentActivity.class);
i.putExtra(EXTRA_ACTIVITY_ID, Integer.parseInt(event.getID()));
i.putExtra(EXTRA_TITLE, event.getTitle());
startActivity(i);
}
});
mListView.setOnScrollListener(new EndlessScrollListener() {
@Override
public void onLoadMore(int page, int totalItemsCount) {
listmode = 2;
new ListViewAsyncTask().execute(page);
}
});
mListView.setVisibility(View.VISIBLE);
adapter.notifyDataSetChanged();
}
private void setEmptyListView() {
adapter = new EventListViewAdapter(getActivity(), AppUtils.sNullListPhp);
//must keep order of "addHeader, setAdapter, setOnXxxListener"
mListView.setAdapter(adapter);
mListView.setVisibility(View.INVISIBLE);
adapter.notifyDataSetChanged();
}
private class ListViewAsyncTask extends AsyncTask<Integer, Void, ListPhp> {
@Override
protected ListPhp doInBackground(Integer... params) {
String jsonString = null;
String url = "http://clubseed.sinaapp.com/api/list.php?format=json2&perpage=10&page=" + params[0];
try {
jsonString = AppUtils.getJSONString(url);
return (ListPhp) JSON.parseObject(jsonString, ListPhp.class);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(ListPhp listPhp) {
switch (listmode) {
case 0:
if (listPhp == null) {
Toast.makeText(getActivity(), "无法连接网络", Toast.LENGTH_SHORT).show();
setEmptyListView();
} else {
listmode = 1;
mListPhp = listPhp;
setListView(listPhp);
}
break;
case 1:
if (listPhp == null) {
Toast.makeText(getActivity(), "无法连接网络", Toast.LENGTH_SHORT).show();
} else {
mListPhp = listPhp;
setListView(listPhp);
}
break;
case 2:
if (listPhp == null) {
Toast.makeText(getActivity(), "无法连接网络", Toast.LENGTH_SHORT).show();
} else {
mListPhp.appendData(listPhp.getData());
adapter.notifyDataSetChanged();
}
break;
}
}
}
private class SliderAsyncTask extends AsyncTask<Void, Void, GetPhp> {
@Override
protected GetPhp doInBackground(Void... params) {
String jsonString = null;
String url = "http://clubseed.sinaapp.com/api/get.php?format=json2";
try {
jsonString = AppUtils.getJSONString(url);
return (GetPhp) JSON.parseObject(jsonString, GetPhp.class);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(GetPhp getPhp) {
switch (slidermode) {
case 0:
if (getPhp == null) {
Toast.makeText(getActivity(), "无法连接网络", Toast.LENGTH_SHORT).show();
setEmptySliderLayout();
} else {
slidermode = 1;
setSliderLayout(getPhp);
}
break;
case 1:
if (getPhp == null) {
Toast.makeText(getActivity(), "无法连接网络", Toast.LENGTH_SHORT).show();
} else {
mSliderLayout.removeAllSliders();
setSliderLayout(getPhp);
}
break;
}
}
}
}