package com.cjj.cartoon.fragment;
import java.util.ArrayList;
import java.util.HashMap;
import android.content.Intent;
import android.media.SoundPool;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.Toast;
import com.capricorn.ArcMenu;
import com.cjj.cartoon.ComicImageViewActivity;
import com.cjj.cartoon.R;
import com.cjj.cartoon.adapter.TwoListDataAdapter;
import com.cjj.cartoon.constants.Constant;
import com.cjj.cartoon.custom.GridViewWithHeaderAndFooter;
import com.cjj.cartoon.dao.YinhunDao;
import com.cjj.cartoon.model.ImageAndTitle;
import com.cjj.loading.LoadingCjjLayout;
import com.cjj.volley.utils.LogUtil;
import de.keyboardsurfer.android.widget.crouton.Crouton;
public class MainFragment extends Fragment implements OnScrollListener,OnItemClickListener,OnRefreshListener {
private GridViewWithHeaderAndFooter gv_data;
private TwoListDataAdapter mAdapter;
private SwipeRefreshLayout swipeRefreshLayout;
private View loadmoreView;
private int pageIndex = 1;
private ListDataAsyncTask task;
private ArcMenu arcMenu;
private SoundPool soundPool;
private HashMap<Integer, Integer> soundPoolMap;
private String link;
private String title;
private LoadingCjjLayout loadingView;
public static MainFragment newInstance(String link,String title) {
MainFragment fragment = new MainFragment();
Bundle args = new Bundle();
args.putString("link", link);
args.putString("title", title);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
if(savedInstanceState!=null)
{
result = savedInstanceState.getParcelableArrayList("result");
}
Bundle bundle = getArguments();
if(bundle!=null)
{
link = bundle.getString("link");
title = bundle.getString("title");
LogUtil.LogMsg_I("link="+link);
}
super.onCreate(savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putParcelableArrayList("result", result);
super.onSaveInstanceState(outState);
}
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_main, null);
loadmoreView = inflater.inflate(R.layout.view_load_more, null);
loadingView = new LoadingCjjLayout(getActivity(), v);
return loadingView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
gv_data = (GridViewWithHeaderAndFooter) view.findViewById(R.id.gv_data);
gv_data.addFooterView(loadmoreView);
gv_data.setOnScrollListener(this);
gv_data.setOnItemClickListener(this);
swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container);
swipeRefreshLayout.setOnRefreshListener(this);
swipeRefreshLayout.setColorSchemeResources( android.R.color.holo_orange_dark);
arcMenu = (ArcMenu) view.findViewById(R.id.arc_menu);
arcMenu.initSounds(getActivity());
initArcMenu(arcMenu, Constant.ITEM_ARC);
super.onViewCreated(view, savedInstanceState);
}
private void initArcMenu(final ArcMenu arcMenu2, int[] itemArc) {
final int itemCount = itemArc.length;
for (int i = 0; i < itemCount; i++) {
ImageView item = new ImageView(getActivity());
item.setImageResource(itemArc[i]);
final int position = i;
arcMenu2.addItem(item, new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "position:" + position, Toast.LENGTH_SHORT).show();
arcMenu2.playSound(2, 0, getActivity());
}
});
}
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
loadingView.show_LoadingView();
task = new ListDataAsyncTask();
task.execute(pageIndex);
hideFootView();
super.onActivityCreated(savedInstanceState);
}
ArrayList<ImageAndTitle> result = null;
private ArrayList<ImageAndTitle> getDataFromNet(int page) {
try {
// result = YinhunDao.getInstance().getComicListData("http://www.ishuhui.com/archives/category/zaixianmanhua/gintama/page/"+page);
// result = YinhunDao.getInstance().getComicListData(link+"/page/"+page);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
private static ArrayList<ImageAndTitle> list_data;
private class ListDataAsyncTask extends
AsyncTask<Integer, Void, ArrayList<ImageAndTitle>> {
ArrayList<ImageAndTitle> results = null;
@Override
protected void onPostExecute(ArrayList<ImageAndTitle> result) {
if(result!=null&&result.size()>0)
{
if(mAdapter==null)
{
list_data = result;
mAdapter = new TwoListDataAdapter(getActivity(), list_data);
gv_data.setAdapter(mAdapter);
}else
{
if(isLoadMore)
{
if(result.equals(results))
return;
results = result;
list_data.addAll(result);
mAdapter.updateData(list_data);
}
if(isRefresh)
{
list_data = result;
// Toast.makeText(getActivity(), "刷新成功", 1000).show();
showCustomViewCrouton();
mAdapter.updateData(list_data);
}
}
reSetting();
loadingView.show_ContentView();
}else{
reSetting();
pageIndex = pageIndex-1;
}
}
@Override
protected ArrayList<ImageAndTitle> doInBackground(Integer... params) {
ArrayList<ImageAndTitle> result = null;
try {
result = YinhunDao.getInstance().getComicListData(link+"/page/"+params[0]);
} catch (Exception e) {
result = null;
e.printStackTrace();
}
return result;
}
}
public void reSetting()
{
hideFootView();
isRefresh = false;
isLoadMore = false;
if(swipeRefreshLayout.isRefreshing())
{
swipeRefreshLayout.setRefreshing(false);
}
}
@Override
public void onDestroyView() {
// TODO Auto-generated method stub
super.onDestroyView();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
ImageAndTitle model = (ImageAndTitle) mAdapter.getItem(position);
Intent intent = new Intent(getActivity(), ComicImageViewActivity.class);
Bundle bundle = new Bundle();
bundle.putString("url", model.link);
bundle.putString("title", model.title);
intent.putExtras(bundle);
startActivity(intent);
getActivity().overridePendingTransition(R.anim.right,R.anim.hold);//切换Activity的过渡动画
}
private boolean isRefresh = false;
@Override
public void onRefresh() {
isRefresh = true;
mListViewPreLast = 0;
pageIndex = 1;
new ListDataAsyncTask().execute(pageIndex);
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
/**
* 处理listView加载更多
* @param view
* @param firstVisibleItem
* @param visibleItemCount
* @param totalItemCount
*/
private int mListViewPreLast = 0;
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
final int lastItem = firstVisibleItem + visibleItemCount;
if (lastItem == totalItemCount) {
if (mListViewPreLast != lastItem) { /**防止多次调用*/
getMoreData();
mListViewPreLast = lastItem;
}
}
}
private boolean isLoadMore = false;
public void getMoreData()
{
showFootView();
isLoadMore = true;
pageIndex +=1;
new ListDataAsyncTask().execute(pageIndex);
}
/**
* show footview
*/
private void showFootView()
{
if(loadmoreView!=null)
{
loadmoreView.setVisibility(View.VISIBLE);
}
}
/**
* hide footView
*/
private void hideFootView()
{
if(loadmoreView!=null)
{
loadmoreView.setVisibility(View.GONE);
}
}
public void showCustomViewCrouton()
{
if(getActivity()!=null&&!getActivity().isFinishing()){
View view = getActivity().getLayoutInflater().inflate(
R.layout.crouton_custom_view, null);
Crouton
// if (displayOnTop.isChecked()) {
// crouton = Crouton.make(this, view);
// } else {
crouton = Crouton.make(getActivity(), view,
R.id.view_line);
// }
crouton.show();}
}
}