package com.novelbook.android.Fragments; import android.content.Context; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.bumptech.glide.Glide; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.novelbook.android.BookActivity; import com.novelbook.android.R; import com.novelbook.android.bean.FirstPage; import com.novelbook.android.bean.NovelBlock; import com.novelbook.android.db.Novel; import com.novelbook.android.db.SiteRule; import com.novelbook.android.netsubscribe.BookSubscribe; import com.novelbook.android.netutils.OnSuccessAndFaultListener; import com.novelbook.android.netutils.OnSuccessAndFaultSub; import com.novelbook.android.utils.Constants; import com.novelbook.android.utils.CyclePageIndicator; import com.novelbook.android.utils.GsonUtil; import com.novelbook.android.utils.ImageUtil; import com.novelbook.android.utils.MyViewPager; import com.novelbook.android.utils.OnItemClickListener; import com.novelbook.android.adapter.BookListAdapter; import com.umeng.analytics.MobclickAgent; import com.youth.banner.Banner; import com.youth.banner.BannerConfig; import com.youth.banner.Transformer; import com.youth.banner.listener.OnBannerListener; import com.youth.banner.loader.ImageLoader; import org.json.JSONObject; import org.litepal.LitePal; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import butterknife.BindView; import butterknife.OnClick; public class Fragment_jingxuan extends BasicFragment implements OnBannerListener { public static final String TAG=Fragment_jingxuan.class.getSimpleName(); private String mParam1; private String mParam2; //@BindView(R.id.llTuijian) // LinearLayout llTuijian; @BindView(R.id.banner) Banner banner; @BindView(R.id.dot_horizontal) LinearLayout cyclell; @BindView(R.id.viewpager_tuijian) MyViewPager mViewpagerTuijian; //@BindView(R.id.titleIndictator) // TitlePageIndicator titleIndicator; @BindView(R.id.imageBlock0) ImageView imageViewBlock0; @BindView(R.id.imageBlock1) ImageView imageViewBlock1; @BindView(R.id.imageBlock2) ImageView imageViewBlock2; @BindView(R.id.imageBlock3) ImageView imageViewBlock3; @BindView(R.id.tvBlock0) TextView tvBlock0; @BindView(R.id.tvBlock1) TextView tvBlock1; @BindView(R.id.tvBlock2) TextView tvBlock2; @BindView(R.id.tvBlock3) TextView tvBlock3; @BindView(R.id.buttonMore1) Button btnMore1; @BindView(R.id.buttonMore2) Button btnMore2; @BindView(R.id.buttonMore3) Button btnMore3; @BindView(R.id.buttonMore4) Button btnMore4; @BindView(R.id.llBlock1) LinearLayout ll1; @BindView(R.id.llBlock2) LinearLayout ll2; @BindView(R.id.llBlock3) LinearLayout ll3; @BindView(R.id.llBlock4) LinearLayout ll4; private List mFragments; private ArrayList mList; // String[] mTitle; private List mBlocks; private List list_path; private List list_title; private FirstPage mFirstPage; private int INDEX_BANNER =1; private int INDEX_TUIJIAN =2; private int blockIndex =3; //从第3个block 开始处理 private int gridItemSpace = 0; public Fragment_jingxuan() { // Required empty public constructor } public static Fragment_jingxuan newInstance(String param1, String param2) { Fragment_jingxuan fragment = new Fragment_jingxuan(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } @Override protected int getLayoutRes() { return R.layout.fragment_jingxuan; } @Override public void initData() { showProgressDialog(true, "正在加载"); BookSubscribe.getFirstPage(Constants.SEX,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { @Override public void onSuccess(String result) { Log.d(TAG, String.format("init data HttpMethods successed on init, trycnt %s " ,error_try)); error_try=0; // mFirstPage= gson.fromJson(result, FirstPage.class); try { mBlocks = GsonUtil.parserNovleBlocks(result,"blocks"); } catch (Exception e) { e.printStackTrace(); } handler.sendEmptyMessage(1); } @Override public void onFault(String errorMsg) { //失败 // Log.d(TAG, String.format("init data HttpMethods error on init, trycnt %s " ,error_try )); retryErorr(1); } }, getActivity())); } protected void processArguments(){ if (getArguments() != null) { Bundle bundle = getArguments() ; } } @Override protected void fillData() { /* mHotNewData_l = initData(mHotNewData_l, 'B'); mHotNewData_g = initData(mHotNewData_g, 'D'); mHotLianZaiData_l = initData(mHotLianZaiData_l, 'C'); mHotLianZaiData_g = initData(mHotLianZaiData_g, 'D'); mFinishedData_l = initData(mFinishedData_l, 'A'); mFinishedData_g = initData(mFinishedData_g, 'G'); */ ll1.setVisibility(View.GONE); ll2.setVisibility(View.GONE); ll3.setVisibility(View.GONE); ll4.setVisibility(View.GONE); blockIndex=3; if(mBlocks ==null || mBlocks.size() ==0){ return; } blockIndex--; if(mBlocks.size()>blockIndex) { ll1.setVisibility(View.VISIBLE); mHotNewData_l = mBlocks.get(blockIndex).getNs().subList(0,mBlocks.get(blockIndex).getOneself()); mHotNewData_g = mBlocks.get(blockIndex).getNs().subList(mBlocks.get(blockIndex).getOneself(),mBlocks.get(blockIndex).getNs().size()-1); tvBlock1.setText(mBlocks.get(blockIndex).getName()); loadImageView(mBlocks.get(blockIndex).getIcon(),imageViewBlock1); if(TextUtils.isEmpty(mBlocks.get(blockIndex).getTitle())){ btnMore1.setVisibility(View.GONE); }else { btnMore1.setTag(mBlocks.get(blockIndex)); } blockIndex++; } // mHotNewData_g = initData(mHotNewData_g, 'D'); if(mBlocks.size()>blockIndex) { ll2.setVisibility(View.VISIBLE); mHotLianZaiData_l = mBlocks.get(blockIndex).getNs().subList(0,mBlocks.get(blockIndex).getOneself()); mHotLianZaiData_g = mBlocks.get(blockIndex).getNs().subList(mBlocks.get(blockIndex).getOneself(),mBlocks.get(blockIndex).getNs().size()-1); tvBlock2.setText(mBlocks.get(blockIndex).getName()); loadImageView(mBlocks.get(blockIndex).getIcon(),imageViewBlock2); if(TextUtils.isEmpty(mBlocks.get(blockIndex).getTitle())){ btnMore2.setVisibility(View.GONE); }else { btnMore2.setTag(mBlocks.get(blockIndex)); } blockIndex++; } // mHotLianZaiData_g = initData(mHotLianZaiData_g, 'D'); // mFinishedData_l = mBlocks.get(2).getNs(); //initData(mFinishedData_l, 'A'); if(mBlocks.size()> blockIndex ) { ll3.setVisibility(View.VISIBLE); mFinishedData_l= mBlocks.get(blockIndex).getNs().subList(0,mBlocks.get(blockIndex).getOneself()); mFinishedData_g = mBlocks.get(blockIndex).getNs().subList(mBlocks.get(blockIndex).getOneself(),mBlocks.get(blockIndex).getNs().size()-1); tvBlock3.setText(mBlocks.get(blockIndex).getName()); loadImageView(mBlocks.get(blockIndex).getIcon(),imageViewBlock3); if(TextUtils.isEmpty(mBlocks.get(blockIndex).getTitle())){ btnMore3.setVisibility(View.GONE); }else { btnMore3.setTag(mBlocks.get(blockIndex)); } } if(mBlocks.size()> blockIndex ) { ll4.setVisibility(View.VISIBLE); mFinishedData_l= mBlocks.get(blockIndex).getNs().subList(0,mBlocks.get(blockIndex).getOneself()); mFinishedData_g = mBlocks.get(blockIndex).getNs().subList(mBlocks.get(blockIndex).getOneself(),mBlocks.get(blockIndex).getNs().size()-1); tvBlock3.setText(mBlocks.get(blockIndex).getName()); loadImageView(mBlocks.get(blockIndex).getIcon(),imageViewBlock3); if(TextUtils.isEmpty(mBlocks.get(blockIndex).getTitle())){ btnMore4.setVisibility(View.GONE); }else { btnMore4.setTag(mBlocks.get(blockIndex)); } } testBanner(banner, this); initialBookList(); initTuijianPagers(); } @Override public void initViews() { gridItemSpace = getResources().getDimensionPixelSize(R.dimen._10dp); } @OnClick({R.id.buttonMore1, R.id.buttonMore2, R.id.buttonMoreTuijian, R.id.buttonMore3 /* , R.id.buttonCatePingfen, R.id.buttonCateRegeng, R.id.buttonCateTuijian, R.id.buttonCateShoucang, R.id.buttonCateWanjie*/ }) void bubmitButton(View view) { switch (view.getId()) { case R.id.buttonMore1: showPaihangbang(btnMore1.getTag()); break; case R.id.buttonMoreTuijian: showPaihangbang("推荐"); break; case R.id.buttonMore2: showPaihangbang(btnMore2.getTag()); break; case R.id.buttonMore3: showPaihangbang(btnMore3.getTag()); break; case R.id.buttonMore4: showPaihangbang(btnMore4.getTag()); break; /* case R.id.buttonCatePingfen: showPaihangbang("评分"); break; case R.id.buttonCateRegeng: showPaihangbang("最热"); break; case R.id.buttonCateWanjie: showPaihangbang("完结"); break; case R.id.buttonCateShoucang: showPaihangbang("收藏"); break; case R.id.buttonCateTuijian: showPaihangbang("推荐"); break;*/ } } void testBanner(Banner banner, OnBannerListener listioner) { //放图片地址的集合 list_path = mBlocks.get(0).getPictures();//new ArrayList();// mBlocks.get(0).getPictures() ; //放标题的集合 list_title = new ArrayList<>(); for (Novel nv : mBlocks.get(0).getNs()) { list_title.add(nv.getName()); } /* list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic21363tj30ci08ct96.jpg"); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic259ohaj30ci08c74r.jpg"); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2b16zuj30ci08cwf4.jpg"); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2e7vsaj30ci08cglz.jpg"); list_title.add("好好学习"); list_title.add("天天向上"); list_title.add("热爱劳动"); list_title.add("不搞对象"); */ //设置内置样式,共有六种可以点入方法内逐一体验使用。 banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE); //设置图片加载器,图片加载器在下方 banner.setImageLoader(ImageUtil.loader); //设置图片网址或地址的集合 banner.setImages(list_path); //设置轮播的动画效果,内含多种特效,可点入方法内查找后内逐一体验 banner.setBannerAnimation(Transformer.Default); //设置轮播图的标题集合 banner.setBannerTitles(list_title); //设置轮播间隔时间 banner.setDelayTime(3000); //设置是否为自动轮播,默认是“是”。 banner.isAutoPlay(true); //设置指示器的位置,小点点,左中右。 banner.setIndicatorGravity(BannerConfig.CENTER) //以上内容都可写成链式布局,这是轮播图的监听。比较重要。方法在下面。 .setOnBannerListener(listioner) //必须最后调用的方法,启动轮播图。 .start(); } //轮播图的监听方法 @Override public void OnBannerClick(int position) { Novel nv = mBlocks.get(0).getNs().get(position); showBookDetail(nv); // showShudanDetail(position); } //cycle viewpagers //---------重磅推荐------------- void initTuijianPagers() { // mViewpagerTuijian =( MyViewPager) rootView.findViewById(R.id.viewpager_tuijian); // if (mFragments == null || mFragments.size() == 0) { // mTitle = new String[]{"精选", "榜单", "书单"}; mFragments = new ArrayList<>(); NovelBlock block = mBlocks.get(1); loadImageView(mBlocks.get(1).getIcon(),imageViewBlock0); tvBlock0.setText( mBlocks.get(1).getName()); List nvs = new ArrayList(); for(Novel novel : block.getNs() ){ if(nvs.size()<3){ nvs.add(novel); }else { mFragments.add(Fragment_jingxuan_tuijian.newInstance(nvs)); nvs = new ArrayList(); nvs.add(novel); } } Log.d(TAG, "initial fragments in tabs "); // } Log.d(TAG, "set viewPager adapter "); // FragmentPagerAdapter mAdapter = new FragmentPagerAdapter(activity.getSupportFragmentManager()) { 第一次进入没问题,再次进入ViewPager的fragment时里面内容就没了,数据丢失 https://blog.csdn.net/allan_bst/article/details/64920076 FragmentPagerAdapter mAdapter = new FragmentPagerAdapter(getChildFragmentManager()) { @Override public Fragment getItem(int position) { return mFragments.get(position); } @Override public int getCount() { return mFragments.size(); } //ViewPager与TabLayout绑定后,这里获取到PageTitle就是Tab的Text // @Override // public CharSequence getPageTitle(int position) { // return mTitle[position]; // } }; cyclell.removeAllViews(); mViewpagerTuijian.setAdapter(mAdapter); mViewpagerTuijian.clearOnPageChangeListeners(); // mViewpagerTuijian.setOnPageChangeListener(new CyclePageIndicator(getContext(), cyclell, mFragments.size())); mViewpagerTuijian.addOnPageChangeListener(new CyclePageIndicator(getContext(), cyclell, mFragments.size())); } //---------------------------------------------------book cate list-------------------------------begin // private BookListAdapter mAdapter; private List mHotNewData_l, mHotNewData_g, mHotLianZaiData_l, mHotLianZaiData_g, mFinishedData_l, mFinishedData_g; @BindView(R.id.rvHotNewL) RecyclerView rvHotNewL; @BindView(R.id.rvHotNewG) RecyclerView rvHotNewG; @BindView(R.id.rvLianZaiG) RecyclerView rvLianZaiG; @BindView(R.id.rvLianZaiL) RecyclerView rvLianZaiL; @BindView(R.id.rvFinishL) RecyclerView rvFinishL; @BindView(R.id.rvFinishG) RecyclerView rvFinishG; int getSpanCnt(){ return Constants.NOVEL_SPAN_CNT; } void initialBookList() { int spanCnt =getSpanCnt(); OnItemClickListener onItemClickListener = new OnItemClickListener() { @Override public void onItemClick(View view, int position) { showBookDetail(mHotNewData_l.get(position)); // openBook(mHotNewData_l.get(position),null); } @Override public void onItemLongClick(View view, int position) { // initDialog(position); // mAdapter.removeData(position); } @Override public void onLinearOutClick(View view, int position, int llId) { } }; if(mHotNewData_l!=null) { rvHotNewL.setLayoutManager(new LinearLayoutManager(activity)); rvHotNewL.setAdapter(new BookListAdapter(activity, mHotNewData_l, R.layout.recycle_list_item_horizon, onItemClickListener)); } if(mHotNewData_g!=null) { rvHotNewG.setLayoutManager(new GridLayoutManager(activity, spanCnt)); if( rvHotNewG.getItemDecorationCount()>0){ rvHotNewG.removeItemDecorationAt(0); } rvHotNewG.addItemDecoration(new SpaceItemDecoration( gridItemSpace)); rvHotNewG.setAdapter(new BookListAdapter(activity, mHotNewData_g, R.layout.recycle_list_item, new OnItemClickListener() { @Override public void onItemClick(View view, int position) { showBookDetail(mHotNewData_g.get(position)); // openBook( mHotNewData_g.get(position) ,null); } @Override public void onItemLongClick(View view, int position) { // initDialog(position); // mAdapter.removeData(position); } @Override public void onLinearOutClick(View view, int position, int llId) { } })); } if(rvLianZaiL!=null) { rvLianZaiL.setLayoutManager(new LinearLayoutManager(this.activity)); rvLianZaiL.setAdapter(new BookListAdapter(activity, mHotLianZaiData_l, R.layout.recycle_list_item_horizon, new OnItemClickListener() { @Override public void onItemClick(View view, int position) { // Toast.makeText(activity, position + "grid click", Toast.LENGTH_SHORT).show(); showBookDetail(mHotLianZaiData_l.get(position)); // openBook( mHotLianZaiData_l.get(position) ,null); } @Override public void onItemLongClick(View view, int position) { // initDialog(position); // mAdapter.removeData(position); } @Override public void onLinearOutClick(View view, int position, int llId) { } })); } if(mHotLianZaiData_g!=null) { rvLianZaiG.setLayoutManager(new GridLayoutManager(activity, spanCnt)); if( rvLianZaiG.getItemDecorationCount()>0){ rvLianZaiG.removeItemDecorationAt(0); } rvLianZaiG.addItemDecoration(new SpaceItemDecoration( gridItemSpace)); rvLianZaiG.setAdapter(new BookListAdapter(activity, mHotLianZaiData_g, R.layout.recycle_list_item, new OnItemClickListener() { @Override public void onItemClick(View view, int position) { // Toast.makeText(activity, position + "grid click", Toast.LENGTH_SHORT).show(); showBookDetail(mHotLianZaiData_g.get(position)); // openBook( mHotLianZaiData_g.get(position) ,null); } @Override public void onItemLongClick(View view, int position) { // initDialog(position); // mAdapter.removeData(position); } @Override public void onLinearOutClick(View view, int position, int llId) { } })); } if(mFinishedData_l!=null) { rvFinishL.setLayoutManager(new LinearLayoutManager(this.activity)); rvFinishL.setAdapter(new BookListAdapter(activity, mFinishedData_l, R.layout.recycle_list_item_horizon, new OnItemClickListener() { @Override public void onItemClick(View view, int position) { // Toast.makeText(activity, position + "grid click", Toast.LENGTH_SHORT).show(); showBookDetail(mFinishedData_l.get(position)); // openBook( mFinishedData_l.get(position) ,null); } @Override public void onItemLongClick(View view, int position) { // initDialog(position); // mAdapter.removeData(position); } @Override public void onLinearOutClick(View view, int position, int llId) { } })); } if(mFinishedData_g!=null) { rvFinishG.setLayoutManager(new GridLayoutManager(activity, spanCnt)); if( rvFinishG.getItemDecorationCount()>0){ rvFinishG.removeItemDecorationAt(0); } rvFinishG.addItemDecoration(new SpaceItemDecoration( gridItemSpace)); rvFinishG.setAdapter(new BookListAdapter(activity, mFinishedData_g, R.layout.recycle_list_item, new OnItemClickListener() { @Override public void onItemClick(View view, int position) { // Toast.makeText(activity, position + "grid click", Toast.LENGTH_SHORT).show(); showBookDetail(mFinishedData_g.get(position)); // openBook( mFinishedData_g.get(position) ,null); } @Override public void onItemLongClick(View view, int position) { // initDialog(position); // mAdapter.removeData(position); } @Override public void onLinearOutClick(View view, int position, int llId) { } })); } } public class SpaceItemDecoration extends RecyclerView.ItemDecoration { private int space; public SpaceItemDecoration(int space) { this.space = space*3; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { //不是第一个的格子都设一个左边和底部的间距 //outRect.left = space; // outRect.bottom = space; //由于每行都只有3个,所以第一个都是3的倍数,把左边距设为0 if (parent.getChildLayoutPosition(view) %getSpanCnt()==0) { Log.d(TAG, "getItemOffsets: left " +parent.getChildLayoutPosition(view)); //outRect.set(0,0,0,0); outRect.right=space; outRect.left=0; }else if(parent.getChildLayoutPosition(view) %getSpanCnt()==2){ Log.d(TAG, "getItemOffsets: right " +parent.getChildLayoutPosition(view)); // outRect.set(0,0,0,0); outRect.right=0; outRect.left=space; }else { // outRect.set(space, 0, space, 0); // outRect.right=space; // outRect.left=space; Log.d(TAG, "getItemOffsets: center " +parent.getChildLayoutPosition(view)); } // outRect.set(0,0,0,0); } } @Override public void onResume() { super.onResume(); MobclickAgent.onPageStart(TAG); } @Override public void onPause(){ super.onPause(); MobclickAgent.onPageEnd(TAG); } }