package com.cjj.nices.fragment; import static com.norbsoft.typefacehelper.TypefaceHelper.typeface; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Locale; import android.annotation.SuppressLint; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; 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.text.TextUtils; import android.util.Log; import android.util.TypedValue; 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.view.animation.BounceInterpolator; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Toast; import com.baoyz.swipemenulistview.SwipeMenu; import com.baoyz.swipemenulistview.SwipeMenuCreator; import com.baoyz.swipemenulistview.SwipeMenuItem; import com.baoyz.swipemenulistview.SwipeMenuListView; import com.baoyz.swipemenulistview.SwipeMenuListView.OnMenuItemClickListener; import com.cjj.nices.activity.MainActivity; import com.cjj.nices.activity.NewsDetailActivity; import com.cjj.nices.activity.R; import com.cjj.nices.adapter.NewsListAdapter; import com.cjj.nices.constant.Constants; import com.cjj.nices.dao.UserDao; import com.cjj.nices.db.NicesDBHelper; import com.cjj.nices.model.NicesApplication; import com.cjj.nices.model.NicesNewsListEntity; import com.cjj.nices.model.NicesNewsListEntity.NewsListEntity; import com.cjj.nices.util.ListUtils; import com.cjj.volley.VolleyError; import com.cjj.volley.callback.CallBackDataListener; import com.cjj.volley.me.CjjVolley; import com.cjj.volley.utils.LogUtil; import de.keyboardsurfer.android.widget.crouton.Configuration; import de.keyboardsurfer.android.widget.crouton.Crouton; import de.keyboardsurfer.android.widget.crouton.Style; /** * 主页fragment类 * @author cjj * */ @SuppressLint("NewApi") public class HomeFragment extends Fragment implements OnScrollListener,OnItemClickListener,OnMenuItemClickListener, OnRefreshListener{ private SwipeMenuListView mSwipeMenuListView; private SwipeRefreshLayout mSwipeLayout; private NewsListAdapter mAdapter; private Calendar mCalendar; private String todayTime; private SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); private View loadmoreView; private ArrayList<NewsListEntity> mArrayList_NewsListEntity = new ArrayList<NicesNewsListEntity.NewsListEntity>(); private boolean isRefresh = false; public static HomeFragment newInstance() { HomeFragment fragment = new HomeFragment(); // Bundle args = new Bundle(); // args.putInt(ARG_SECTION_NUMBER, sectionNumber); // fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { this.setHasOptionsMenu(true); mCalendar = Calendar.getInstance(); mCalendar.add(Calendar.DAY_OF_YEAR, 1); todayTime = mSimpleDateFormat.format(mCalendar.getTime()); super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_home, null); loadmoreView = inflater.inflate(R.layout.view_load_more, null); typeface(loadmoreView,NicesApplication.nicesApplication.getKatongTypeface()); return v; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main, menu); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_refresh) { mSwipeLayout.setRefreshing(true); /** * 获取网上数据 */ isRefresh = true; getNewsListGsonDataFromNet(false,todayTime); return true; } return super.onOptionsItemSelected(item); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { mSwipeMenuListView = (SwipeMenuListView) view.findViewById(R.id.swipe_list_view); // Close Interpolator mSwipeMenuListView.setCloseInterpolator(new BounceInterpolator()); mSwipeMenuListView.addFooterView(loadmoreView); mSwipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container); mSwipeLayout.setOnRefreshListener(this); mSwipeLayout.setColorSchemeResources(android.R.color.holo_red_light, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_blue_bright ); super.onViewCreated(view, savedInstanceState); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { SwipeMenuCreator creator = new SwipeMenuCreator() { @Override public void create(SwipeMenu menu) { createMenu(menu); } }; // set creator mSwipeMenuListView.setMenuCreator(creator); mSwipeMenuListView.setOnItemClickListener(this); mSwipeMenuListView.setOnMenuItemClickListener(this); mSwipeMenuListView.setOnScrollListener(this); /** * 获取本地数据 */ getNewsListDataFromLocal(todayTime); /** * 获取网上数据 */ getNewsListGsonDataFromNet(false,todayTime); hideFootView(); super.onActivityCreated(savedInstanceState); } private void getNewsListDataFromLocal(String todayTime) { new LocalNewsListAsyncTask().execute(todayTime); } private void getNewsListGsonDataFromNet(boolean oldContentFlag,String time) { UserDao.getInstance().getNewsListGsonDataFromNet(oldContentFlag,time,new CallBackDataListener() { @Override public void error(VolleyError error) { toastMsg("网络错误"); // toastMsg(VolleyErrorHelper.getMessage(error, getActivity())); setReSetting(); } @Override public void callBack(Object data) { if(data instanceof NicesNewsListEntity) { NicesNewsListEntity nicesNewsListEntity = (NicesNewsListEntity) data; if(mAdapter==null) { mArrayList_NewsListEntity = nicesNewsListEntity.stories; mAdapter = new NewsListAdapter(getActivity(), mArrayList_NewsListEntity); mSwipeMenuListView.setAdapter(mAdapter); }else { if(isLoadMroeDataFlag) { LogUtil.LOgMsg_W("cjj isloadmore"); mArrayList_NewsListEntity.addAll(nicesNewsListEntity.stories); mAdapter.updateData(mArrayList_NewsListEntity); }else{ if(isRefresh) showCrouton("刷新成功", Style.TRANSPARENT, Configuration.DEFAULT); mArrayList_NewsListEntity = nicesNewsListEntity.stories; mAdapter.updateData(mArrayList_NewsListEntity); mListViewPreLast = 0; } } } setReSetting(); } }); } public void setReSetting() { isRefresh = false; mSwipeLayout.setRefreshing(false); isLoadMroeDataFlag = false; hideFootView(); } @Override public void onDestroyView() { CjjVolley.cancelAll(Constants.TAG_REQUEST_GSON_NEWS_LIST); super.onDestroyView(); } private void createMenu(SwipeMenu menu) { SwipeMenuItem item1 = new SwipeMenuItem( getActivity().getApplicationContext()); item1.setBackground(new ColorDrawable(Color.rgb(0xE5, 0x18, 0x5E))); item1.setWidth(dp2px(90)); item1.setIcon(R.drawable.ic_action_share); menu.addMenuItem(item1); SwipeMenuItem item2 = new SwipeMenuItem( getActivity().getApplicationContext()); item2.setBackground(new ColorDrawable(Color.rgb(0xE5, 0xE0,0x3F))); item2.setWidth(dp2px(90)); item2.setIcon(R.drawable.ic_action_important); menu.addMenuItem(item2); } private int dp2px(int dp) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics()); } @Override public boolean onMenuItemClick(int position, SwipeMenu menu, int index) { NewsListEntity entity = (NewsListEntity) mAdapter.getItem(position); switch (index) { case 0: MainActivity.instance.showShare(entity.title); break; case 1: favoriteDao(entity, entity.id); break; } return false; } private void favoriteDao(NewsListEntity entity, long news_id) { if(NicesDBHelper.queryIsFavorite(String.valueOf(news_id))){ Toast.makeText(getActivity(), "已收藏", Toast.LENGTH_SHORT).show(); }else{ String title = entity.title; String image = entity.images.get(0); String id = String.valueOf(news_id); LogUtil.LogMsg_I(title); LogUtil.LogMsg_I(image); LogUtil.LogMsg_I(id); if (!TextUtils.isEmpty(id) && !TextUtils.isEmpty(title) && !TextUtils.isEmpty(image) ) { NicesDBHelper.insertFavoriteContent(id, title, image,"cjj"); Toast.makeText(getActivity(), "添加收藏成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getActivity(), "添加收藏失败", Toast.LENGTH_SHORT).show(); } } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { NewsListEntity entity = (NewsListEntity) mAdapter.getItem(position); if (entity == null) return; Intent intent = new Intent(getActivity(), NewsDetailActivity.class); intent.putExtra("id", entity.id); intent.putExtra("newsEntity", entity); startActivity(intent); } @Override public void onRefresh() { isRefresh = true; /** * 获取网上数据 */ getNewsListGsonDataFromNet(false,todayTime); } private void toastMsg(String str) { Toast.makeText(getActivity(), str, Toast.LENGTH_SHORT).show(); } /** * 获取本地数据 异步处理 */ public class LocalNewsListAsyncTask extends AsyncTask<String, Integer, ArrayList<NewsListEntity>>{ @Override protected ArrayList<NewsListEntity> doInBackground(String... params) { ArrayList<NewsListEntity> list = NicesDBHelper.queryNewsList(params[0]); Log.i("cjj", "today = "+params[0]); if (ListUtils.isEmpty(list)) { Calendar calendar = Calendar.getInstance(); String yesterday = mSimpleDateFormat.format(calendar.getTime()); Log.i("cjj", "yesterday = "+yesterday); list = NicesDBHelper.queryNewsList(yesterday); } if (ListUtils.isEmpty(list)) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, -1); String dayBeforeYesterday = mSimpleDateFormat.format(calendar.getTime()); Log.i("cjj", "daybeforeyesterday = "+dayBeforeYesterday); list = NicesDBHelper.queryNewsList(dayBeforeYesterday); } return list; } @Override protected void onPostExecute(ArrayList<NewsListEntity> result) { super.onPostExecute(result); if(mAdapter == null) { if(result != null) { mArrayList_NewsListEntity = result; mAdapter = new NewsListAdapter(getActivity(), mArrayList_NewsListEntity); mSwipeMenuListView.setAdapter(mAdapter); } }else { if(result!=null) { mArrayList_NewsListEntity = result; mAdapter.updateData(mArrayList_NewsListEntity); } } } } /** * 获取以往新闻 */ public class OldNewListAsyncTask extends AsyncTask<String, Integer,ArrayList<NewsListEntity>> { String time; public OldNewListAsyncTask(String time){ this.time = time; }; @Override protected ArrayList<NewsListEntity> doInBackground(String... params) { String time = params[0]; ArrayList<NewsListEntity> list_old = NicesDBHelper.queryNewsList(time); return list_old; } @Override protected void onPostExecute(ArrayList<NewsListEntity> result) { super.onPostExecute(result); if(mArrayList_NewsListEntity!=null) { // if(ListUtils.isEmpty(result)) // { // if(result!=null) // mArrayList_NewsListEntity.addAll(result); // mAdapter.updateData(mArrayList_NewsListEntity); // hideFootView(); // }else{ loadMoreData(time); // } }else{ LogUtil.LOgMsg_W("mArrayList_NewsListEntity===>"+time); } } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } /** * 处理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) { /**防止多次调用*/ mCalendar.add(Calendar.DAY_OF_YEAR, -1); String formatedDate = mSimpleDateFormat.format(mCalendar.getTime()); // toastMsg("more"); showFootView(); new OldNewListAsyncTask(formatedDate).execute(formatedDate); mListViewPreLast = lastItem; } } } private boolean isLoadMroeDataFlag = false; public void loadMoreData(String time) { isLoadMroeDataFlag = true; getNewsListGsonDataFromNet(true,time); } /** * show footview */ private void showFootView() { if(loadmoreView!=null) { loadmoreView.setVisibility(View.VISIBLE); } } /** * hide footView */ private void hideFootView() { if(loadmoreView!=null) { loadmoreView.setVisibility(View.GONE); } } private void showCrouton(String croutonText, Style croutonStyle, Configuration configuration) { Crouton.makeText(getActivity(), croutonText, croutonStyle).show(); } }