页面类型一:红框是个Fragment,头部是一张大图,下面都是为两列的图,用的是recyclerview实现
页面类型二:红框是个Fragment,头部是无线循环轮播,下面是栏目,用的是recyclerview实现
页面类型二:红框是个Fragment,头部是无线循环轮播,下面是两列图,用的是recyclerview实现
首页进来就是10个页面(viewpager+Fragment),滑动切换页面的时候低端机子会明显卡顿,配置好的手机,如果快速滑动切换也不是那么流畅
下面贴代码:
public class HomeContentItemFragment extends BaseFragment {
public static final String MODEL = "model"; public static final String TYPE = "type_show"; public static final String ISFIRSTPAGER = "isFirstPager"; // 安利电台 public final static int AUDIO_ID = 999999998; //点击“听见安利”的id public final static int SUBJECT_ID = 7; //点击“主题专区”的id private final int RECOMMEND_ID = 100;// navId=100为推荐id private NavModel navModel; private ListvideoList; private List contentVideoList1,heardVideoList; private List contentVideoList2; private ImageLoader imgImageLoader; private ImageView empty; private PtrClassicFrameLayout refreshLayout; private int TYPE_SHOW;//0默认头部轮播页面,1为单张大图页面,-1为含有二三级页面 private RecyclerView recyclerView; private ContentItemAdapter_recylerview adapter_recylerview;
public static HomeContentItemFragment newInstance(NavModel navModel,boolean isFirstPager,int TYPE_SHOW) { HomeContentItemFragment fragment = new HomeContentItemFragment(); Bundle bundle = new Bundle(); bundle.putSerializable(MODEL, navModel); bundle.putBoolean(ISFIRSTPAGER, isFirstPager); bundle.putInt(TYPE,TYPE_SHOW); fragment.setArguments(bundle); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } private boolean isLogin; @Override protected void initData() { videoList=new ArrayList(); imgImageLoader = ImageLoader.getInstance(); navModel = getArguments() != null ? (NavModel) getArguments().getSerializable(MODEL) : null; TYPE_SHOW=getArguments() != null ? getArguments().getInt(TYPE) : 0; isLogin = !UserDBUtil.getInstance(getApplicationContext()).isNeedLogin();
} private int navId; public void initVideoList(){ if (navModel != null) { navId= (int) navModel.getNavId(); videoList.clear(); if (navModel.getNavId() == RECOMMEND_ID) { videoList = VideoDBUtil.getRecomendVideo(navModel.getNavId(), isLogin,getApplicationContext()); } else if (navModel.getNavId() == AUDIO_ID) { videoList = VideoDBUtil.getAudioVideo(isLogin,getApplicationContext()); } else if (navModel.getNavId() == SUBJECT_ID) { videoList = VideoDBUtil.getSubjectVideo(isLogin,getApplicationContext()); } else { videoList = VideoDBUtil.getCategoryVideo(navModel.getNavId(), isLogin,getApplicationContext()); } } if (videoList == null) { videoList = new ArrayList(); } //内容是显示类型1 if(TYPE_SHOW==0||TYPE_SHOW==1){ if(videoList!=null&&videoList.size()>0){ heardVideoList=new ArrayList (); contentVideoList1=new ArrayList (); for (int i=0;i modelList=new ArrayList (); List modelList_2=new Select().from(NavModel.class).where(VideoDBConstant.VALID + " = 1 and parent_id = ?",navModel.getNavId()).orderBy(VideoDBConstant.ORDER_ID + " ASC").execute(); modelList.addAll(modelList_2); for (int j=0;j modelList_3=new Select().from(NavModel.class).where(VideoDBConstant.VALID + " = 1 and parent_id = ?",modelList_2.get(j).getNavId()).orderBy(VideoDBConstant.ORDER_ID + " ASC").execute(); modelList.addAll(modelList_3); if(modelList_3.size()>0){ haveThree=true; } } String str=""; if(haveThree){ str="( valid= 1 and t_a_order != 0 and cId = "+modelList.get(0).getNavId()+" )" ; for (int k=1;k videoModelList =new Select().from(VideoModel.class).where(str).orderBy("t_a_order ASC").execute(); for (int i=0;i =3){ break; } } } }else { str="( valid= 1 and a_order != 0 and cId = "+modelList.get(0).getNavId()+" )" ; for (int k=1;k videoModelList =new Select().from(VideoModel.class).where(str).orderBy("a_order ASC").execute(); for (int i=0;i =3){ break; } } } } } heardVideoList=new ArrayList (); for (int i=0;i
}
@Override protected View initViews(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = inflater.inflate(R.layout.fragment_home_content_item, container, false); refreshLayout= (PtrClassicFrameLayout) view.findViewById(R.id.refresh_layout); recyclerView= (RecyclerView) view.findViewById(R.id.recyclerView); empty= (ImageView) view.findViewById(R.id.emptydate); refreshLayout.setLastUpdateTimeRelateObject(this); refreshLayout.setPtrHandler(new PtrHandler() { @Override public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) { return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header); } @Override public void onRefreshBegin(PtrFrameLayout frame) { new Thread(new Runnable() { @Override public void run() { refreshData(); } }).start(); } }); if(TYPE_SHOW==-1){ recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() { @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.left = getResources().getDimensionPixelSize(R.dimen.recyclerview_item_10); outRect.right = getResources().getDimensionPixelSize(R.dimen.recyclerview_item_10); if(parent.getChildLayoutPosition(view)==0){ outRect.top = getResources().getDimensionPixelSize(R.dimen.recyclerview_item_5); } } }); } else { GridLayoutManager gridLayoutManager=new GridLayoutManager(context,2,LinearLayoutManager.VERTICAL, false); gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { if(position==0){ return 2; } return 1; } }); recyclerView.setLayoutManager(gridLayoutManager); recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() { @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.left = getResources().getDimensionPixelSize(R.dimen.recyclerview_item_5); outRect.right = getResources().getDimensionPixelSize(R.dimen.recyclerview_item_5); outRect.bottom = getResources().getDimensionPixelSize(R.dimen.recyclerview_item_5); outRect.top=getResources().getDimensionPixelSize(R.dimen.recyclerview_item_5); if(parent.getChildLayoutPosition(view)!=0){ if(parent.getChildLayoutPosition(view)%2==0){//右边小图 outRect.right=getResources().getDimensionPixelSize(R.dimen.recyclerview_item_10); }else {//左边小图 outRect.left=getResources().getDimensionPixelSize(R.dimen.recyclerview_item_10); } }else { outRect.left = getResources().getDimensionPixelSize(R.dimen.recyclerview_item_10); outRect.right = getResources().getDimensionPixelSize(R.dimen.recyclerview_item_10); } } }); } adapter_recylerview=new ContentItemAdapter_recylerview(null,null,null,getApplicationContext(),imgImageLoader,navId,TYPE_SHOW); recyclerView.setAdapter(adapter_recylerview); return view; }
@Override protected void initWidgetActions() { imgImageLoader = ImageLoader.getInstance(); adapter_recylerview.setOnItemClickListener(new ContentItemAdapter_recylerview.MyItemClickListener() { @Override public void onItemClick(VideoModel videoModel) { onMyItemClick(videoModel); } }); MyAsyncTask asyncTask=new MyAsyncTask(); asyncTask.execute(); } public void showData(){ if(videoList.size()==0){ empty.setVisibility(View.VISIBLE); } adapter_recylerview.setVideoList(contentVideoList1, contentVideoList2, heardVideoList); }
@Override protected void lazyLoad() { if(navModel==null){ return; } if(SettingDBUtil.getInstance(getApplicationContext()).isHomeFirstOpen()&&navModel.getTitle().equals("健康")){ BusProvider.getInstance().post(new ShowHelp()); SettingDBUtil.getInstance(getApplicationContext()).setHomeFirstOpen(false); } } private void onMyItemClick(VideoModel videoModel) { if (videoModel.getType() == CommonConstant.TOPIC_TYPE) { Intent intent = new Intent(getActivity(), MyListActivity.class); intent.putExtra(MyListActivity.TYPE, MyListActivity.ActivtyType.TOPIC); intent.putExtra(TopicFragment.TOPIC_ID, videoModel.getVideoId()); intent.putExtra(MyListActivity.TITLE, videoModel.getTitle()); startActivity(intent); } else if (videoModel.getType() == CommonConstant.VIDEO_ON_LIVE_TYPE) { try { if (NetWorkHelper.isNetworkAvailable(getActivity())) { if (NetWorkHelper.isWifiDataEnable(getActivity())) { Intent intent = new Intent(getActivity(), VideoOnLive.class); intent.putExtra(VideoDetailActivity.VIDEO_ID, videoModel.getVideoId() + ""); intent.putExtra(VideoDetailActivity.WEB_URL, videoModel.getWebUrl()); startActivity(intent); getActivity().overridePendingTransition(R.anim.push_left_in, R.anim.no_anim); } else { Hook(videoModel.getVideoId() + "", videoModel.getWebUrl()); } } else { Toast.makeText(getApplicationContext(), "没有网络,无法观看视频。", Toast.LENGTH_LONG).show(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { Intent intent = new Intent(getActivity(), VideoDetailActivity.class); intent.putExtra(VideoDetailActivity.VIDEO_ID, videoModel.getVideoId()); startActivity(intent); getActivity().overridePendingTransition(R.anim.push_left_in, R.anim.no_anim); } } private void Hook(final String videoId, final String webUrl) { Builder builder = new Builder(getActivity()); builder.setMessage("温馨提示:非Wi-fi环境下,播放视频会消耗较多流量!"); builder.setPositiveButton("继续播放", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); Intent intent = new Intent(getActivity(), VideoOnLive.class); intent.putExtra(VideoDetailActivity.VIDEO_ID, videoId); intent.putExtra(VideoDetailActivity.WEB_URL, webUrl); startActivity(intent); getActivity().overridePendingTransition(R.anim.push_left_in, R.anim.no_anim); } }); builder.setNegativeButton("暂不播放", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } }); builder.show(); }
private void refreshData() { Long lastLoadDataTime = SettingDBUtil.getInstance(context).getLastRefreshDataTime(); final long currentTime=System.currentTimeMillis(); RequestParams params = new RequestParams(VideoConstant.NEW_DATA_REFRESH +lastLoadDataTime); x.http().get(params, new Callback.CommonCallback() { @Override public void onSuccess(final String result) { Toast.makeText(getApplicationContext(),"更新成功",Toast.LENGTH_SHORT).show(); if (result != null && result.trim().length() > 10) { new Thread(new Runnable() { @Override public void run() { saveData(result); } }).start(); SettingDBUtil.getInstance(context).setRefreshDataTime(currentTime); } } @Override public void onError(Throwable ex, boolean isOnCallback) { Toast.makeText(getApplicationContext(),"更新失败",Toast.LENGTH_SHORT).show(); } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { refreshLayout.refreshComplete(); } }); } private void saveData(String result) { JSONObject obj = null; JSONArray videoArr = null; try { obj = new JSONObject(result); videoArr = obj.optJSONArray(VideoConstant.VIDEOLIST); } catch (JSONException e) { } if (videoArr != null) { ActiveAndroid.beginTransaction(); try { for (int i = 0, videoLen = videoArr.length(); i < videoLen; i++) { VideoModel videoModel = new VideoModel(); JSONObject navObj = videoArr.optJSONObject(i); videoModel.setVideoId(navObj.optLong(VideoConstant.ID)); videoModel.setType(navObj.optInt(VideoConstant.TYPE)); videoModel.setClicked(false); videoModel.setTitleUpload(navObj.optString(VideoConstant.TITLE_UPLOAD)); videoModel.setrOrder(navObj.optInt(VideoConstant.RORDER)); videoModel.setrId(navObj.optInt(VideoConstant.RID)); videoModel.setcId(navObj.optInt(VideoConstant.CID)); videoModel.setcOrder(navObj.optInt(VideoConstant.CORDER)); videoModel.settId(navObj.optInt(VideoConstant.TID)); videoModel.settOrder(navObj.optInt(VideoConstant.TORDER)); videoModel.setTitle(navObj.optString(VideoConstant.TITLE)); videoModel.setValid(navObj.optInt(VideoConstant.VALID)); videoModel.setDetail(navObj.optString(VideoConstant.DETAIL)); videoModel.setWebUrl(navObj.optString(VideoConstant.WEBURL)); videoModel.setExpireDate(navObj.optInt(VideoConstant.EXPIREDATE)); videoModel.setShootDate(navObj.optLong(VideoConstant.SHOOTDATE)); videoModel.setIsVip(navObj.optInt(VideoConstant.IS_VIP)); videoModel.setRole(navObj.optString(VideoConstant.ROLE)); videoModel.setPermission(navObj.optInt(VideoDBConstant.PERMISSION)); videoModel.setTags(navObj.optString(VideoConstant.TAGS)); videoModel.setPicDate(navObj.optLong(VideoConstant.PICDATE)); videoModel.setSign(navObj.optInt(VideoConstant.SIGN)); videoModel.setaOrder(navObj.optInt(VideoDBConstant.A_ORDER)); videoModel.settAOrder(navObj.optInt(VideoDBConstant.T_A_ORDER)); try { VideoDBUtil.deleteVideo(videoModel.getVideoId()); } catch (Exception e) { e.printStackTrace(); } if (videoModel.getRole() == null || videoModel.getRole().trim().length() == 0) { videoModel.setRole(VideoConstant.NULL); } videoModel.save(); } ActiveAndroid.setTransactionSuccessful(); }catch(Exception e) { }finally { ActiveAndroid.endTransaction(); } getActivity().runOnUiThread(new Runnable() { @Override public void run() { BusProvider.getInstance().post(new RefreshEvent(navModel.getParent_id()));//通知更新数据 } }); } }
@Subscribe public void scrollTop(ContentScrollTopEvent contentScrollTopEvent){ if(recyclerView!=null){ recyclerView.smoothScrollToPosition(0); } }
@Override public void onDestroy() { super.onDestroy(); if(adapter_recylerview!=null){ adapter_recylerview.cancelTimer(); } } @Override public void onResume() { super.onResume(); BusProvider.getInstance().register(this); } @Override public void onPause() { super.onPause(); try { BusProvider.getInstance().unregister(this);//注销 }catch (Exception e){} } class MyAsyncTask extends AsyncTask { @Override protected Object doInBackground(Object[] params) { initVideoList(); return null; } @Override protected void onPostExecute(Object o) { showData(); super.onPostExecute(o); } }
}
这是适配器代码:
public class ContentItemAdapter_recylerview extends RecyclerView.Adapter {
public final static int AUDIO_ID = 999999998; //点击“听见安利”的id public final static int SUBJECT_ID = 7; //点击“主题专区”的id private ListcontentVideoModelList1, contentVideoList, heardVideoList; private List contentVideoModelList2; private Context context; protected DisplayImageOptions mOptions; protected ImageLoader mImageLoader; private int TYPE_SHOW = 0;//0默认头部轮播页面,1为单张大图页面,-1为含有二三级页面 private static final int TYPE_CONTENT = 0; private static final int TYPE_HEADER = 1; private int listSize;
public ContentItemAdapter_recylerview(ListcontentVideoModelList1, List contentVideoModelList2, List heardVideoList, Context context, ImageLoader mImageLoader, long navId, int TYPE_SHOW) { this.contentVideoModelList1 = contentVideoModelList1; this.contentVideoModelList2 = contentVideoModelList2; this.heardVideoList = heardVideoList; this.context = context; this.mImageLoader = mImageLoader; this.navId = navId; this.TYPE_SHOW = TYPE_SHOW; mOptions = new DisplayImageOptions.Builder().showImageForEmptyUri(R.drawable.default_pic).showImageOnLoading(R.drawable.default_pic) .resetViewBeforeLoading(true).cacheInMemory(false).cacheOnDisc(true).imageScaleType(ImageScaleType.EXACTLY) .bitmapConfig(Bitmap.Config.RGB_565).displayer(new SimpleBitmapDisplayer()).build(); } //搜索关键字 private String keyword; protected long navId; private MyItemClickListener mItemClickListener; @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_CONTENT) { if (TYPE_SHOW == 0 || TYPE_SHOW == 1) { return new ContentViewHolder1(View.inflate(context, R.layout.view_content_item, null)); } else if (TYPE_SHOW == -1) { return new ContentViewHolder2(View.inflate(context, R.layout.view_home_content_item, null)); } } else if (viewType == TYPE_HEADER) { if (TYPE_SHOW == 0 || TYPE_SHOW == -1) { return new HeaderViewHolderWithViewPager(View.inflate(context, R.layout.home_content_item_header, null)); } else if (TYPE_SHOW == 1) { return new HeaderViewHolderWithImager(View.inflate(context, R.layout.view_content_home_header, null)); } } return null; } @Override public int getItemViewType(int position) { if (position == 0 && (heardVideoList == null ? false : heardVideoList.size() > 0 ? true : false)) { return TYPE_HEADER; } return TYPE_CONTENT; } public void setOnItemClickListener(MyItemClickListener listener) { this.mItemClickListener = listener; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { //头部显示--单张大图 if (holder instanceof HeaderViewHolderWithImager) { showHeaderViewWithImager((HeaderViewHolderWithImager) holder, heardVideoList.get(0)); } //头部显示--轮播 if (holder instanceof HeaderViewHolderWithViewPager) { showHeaderViewWithViewPager((HeaderViewHolderWithViewPager) holder); } //头部以下内容显示--类型1 if (holder instanceof ContentViewHolder1) { VideoModel videoModel = contentVideoModelList1.get(heardVideoList == null ? position : heardVideoList.size() > 0 ? position - 1 : position); showContentView1((ContentViewHolder1) holder, videoModel); if (!MyImageLoader.isMemoryCache(context, StorageHelper.getListSmallImgUrl(videoModel), ((ContentViewHolder1) holder).img, mImageLoader)) { mImageLoader.displayImage(StorageHelper.getListSmallImgUrl(videoModel), ((ContentViewHolder1) holder).img, mOptions); } } //头部以下内容显示--类型2 if (holder instanceof ContentViewHolder2) { showContentView2((ContentViewHolder2) holder, heardVideoList == null ? position : heardVideoList.size() > 0 ? position - 1 : position); } } public void setVideoList(List contentVideoModelList1, List contentVideoModelList2, List heardVideoList) { this.contentVideoModelList1 = contentVideoModelList1; this.contentVideoModelList2 = contentVideoModelList2; this.heardVideoList = heardVideoList; notifyDataSetChanged(); }
@Override public int getItemCount() { listSize = 0; switch (TYPE_SHOW) { case 0: listSize = heardVideoList == null ? 0 : heardVideoList.size() > 0 ? 1 : 0; listSize = contentVideoModelList1 == null ? listSize : listSize + contentVideoModelList1.size(); break; case 1: listSize = heardVideoList == null ? 0 : 1; listSize = contentVideoModelList1 == null ? listSize : listSize + contentVideoModelList1.size(); break; case -1: listSize = heardVideoList == null ? 0 : heardVideoList.size() > 0 ? 1 : 0; listSize = contentVideoModelList2 == null ? listSize : listSize + contentVideoModelList2.size(); break; } return listSize; }
/** * @function 头部--单张大图——SHOW_DATA * @author mootor * created at 2016/8/16 17:32 */ private HomeContentItemAdsAdapter homeContentItemAdsAdapter; private Timer timer; private TimerTask task; private int currentItemPosition = 0; private void showHeaderViewWithImager(HeaderViewHolderWithImager holder, VideoModel model) { holder.text.setText(model.getTitle()); holder.audioImg.setVisibility(View.GONE); if (model.getType() == CommonConstant.TOPIC_TYPE) { holder.topicImg.setVisibility(View.VISIBLE); } else { holder.topicImg.setVisibility(View.GONE); if (model.getIsVip() == 1 /*&& !UserDBUtil.getInstance(context).isNeedLogin()*/) {// vip holder.topicImg.setImageResource(R.drawable.corner_vip); holder.topicImg.setVisibility(View.VISIBLE); } if (StorageHelper.isAudioRes(model)) { holder.audioImg.setVisibility(View.VISIBLE); } } if (model.isClicked()) { holder.newVideoImg.setVisibility(View.GONE); } else { holder.newVideoImg.setVisibility(View.VISIBLE); } if (!MyImageLoader.isMemoryCache(context, StorageHelper.getListBigImgUrl(model), holder.img, mImageLoader)) { mImageLoader.displayImage(StorageHelper.getListBigImgUrl(model), holder.img, mOptions); } }
/** * @function 头部--轮播——SHOW_DATA * @author mootor * created at 2016/8/16 18:25 */ private void showHeaderViewWithViewPager(final HeaderViewHolderWithViewPager holder) { if (homeContentItemAdsAdapter == null) { homeContentItemAdsAdapter = new HomeContentItemAdsAdapter(context, heardVideoList, mImageLoader); holder.viewPager.removeAllViews(); holder.viewPager.setAdapter(homeContentItemAdsAdapter); initDots(holder);//初始化指示器 homeContentItemAdsAdapter.setOnItemClickListener(new MyItemClickListener() { @Override public void onItemClick(VideoModel videoModel) { if (mItemClickListener != null) { mItemClickListener.onItemClick(videoModel); } } }); holder.viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { currentItemPosition = position; if (heardVideoList.size() < 1) { return; } updateIntroAndDot(holder); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); if (heardVideoList.size() > 1) { holder.topAdTextView.setText(heardVideoList.get(0).getTitle()); //计时轮播 if (timer == null) { timer = new Timer(); } if (task == null) { task = new TimerTask() { public void run() { if (holder.viewPager != null) holder.viewPager.post(new Runnable() { @Override public void run() { holder.viewPager.setCurrentItem(currentItemPosition + 1); } }); } }; timer.schedule(task, 2000, 2000); } } } } public void cancelTimer(){ if(timer!=null){ timer.cancel(); } }
/** * @function 头部以下内容——类型1——SHOW_DATA * @author mootor * created at 2016/8/16 18:25 */ protected void showContentView1(ContentViewHolder1 holder, VideoModel model) { SpannableStringBuilder textString = null; keyword = Valuepass.newInstance().getKeywordsearch(); if (keyword != null) { textString = TextUtilTools.highlight(model.getTitle(), keyword); } else { textString = new SpannableStringBuilder(model.getTitle()); } holder.text.setText(textString); holder.audioImg.setVisibility(View.GONE); holder.topicImg.setVisibility(View.GONE); if (navId != AUDIO_ID && navId != SUBJECT_ID) { if (model.getIsVip() == 1 /*&& !UserDBUtil.getInstance(context).isNeedLogin()*/) {// vip holder.topicImg.setImageResource(R.drawable.corner_vip); holder.topicImg.setVisibility(View.VISIBLE); } else if (StorageHelper.isAudioRes(model)) {// 音频 holder.audioImg.setVisibility(View.VISIBLE); } else if (model.getType() == CommonConstant.TOPIC_TYPE) {// topic holder.topicImg.setImageResource(R.drawable.home_topic); holder.topicImg.setVisibility(View.VISIBLE); } } if (model.isClicked()) { holder.newVideoImg.setVisibility(View.GONE); } else { holder.newVideoImg.setVisibility(View.VISIBLE); } }
/** * @function 头部以下内容——类型2——SHOW_DATA * @author mootor * created at 2016/8/17 11:51 */ private void showContentView2(final ContentViewHolder2 holder, final int position) { if (contentVideoModelList2.get(position).getVideoModelList().size() >= 1) { holder.content_layout.setVisibility(View.VISIBLE); holder.contentLayout1.setVisibility(View.VISIBLE); updateHolder(holder, contentVideoModelList2.get(position).getVideoModelList().get(0), 1, contentVideoModelList2.get(position).getNavModel().getNavId()); final ContentViewHolder2 finalHolder1 = holder; if (!MyImageLoader.isMemoryCache(context, StorageHelper.getListSmallImgUrl(contentVideoModelList2.get(position).getVideoModelList().get(0)), finalHolder1.img1, mImageLoader)) { mImageLoader.displayImage(StorageHelper.getListSmallImgUrl(contentVideoModelList2.get(position).getVideoModelList().get(0)), finalHolder1.img1, mOptions); } holder.contentLayout1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mItemClickListener != null) { VideoModel videoModel = contentVideoModelList2.get(position).getVideoModelList().get(0); if (!videoModel.isClicked()) { holder.newVideoImg1.setVisibility(View.GONE); videoModel.setClicked(true); videoModel.save(); } mItemClickListener.onItemClick(videoModel); } } }); } else { holder.content_layout.setVisibility(View.GONE); holder.contentLayout1.setVisibility(View.GONE); holder.contentLayout2.setVisibility(View.GONE); }
if (contentVideoModelList2.get(position).getVideoModelList().size() >= 2) { holder.contentLayout2.setVisibility(View.VISIBLE); updateHolder(holder, contentVideoModelList2.get(position).getVideoModelList().get(1), 2, contentVideoModelList2.get(position).getNavModel().getNavId()); final ContentViewHolder2 finalHolder = holder; if (!MyImageLoader.isMemoryCache(context, StorageHelper.getListSmallImgUrl(contentVideoModelList2.get(position).getVideoModelList().get(1)), finalHolder.img2, mImageLoader)) { mImageLoader.displayImage(StorageHelper.getListSmallImgUrl(contentVideoModelList2.get(position).getVideoModelList().get(1)), finalHolder.img2, mOptions); } holder.contentLayout2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mItemClickListener != null) { VideoModel videoModel = contentVideoModelList2.get(position).getVideoModelList().get(1); if (!videoModel.isClicked()) { holder.newVideoImg2.setVisibility(View.GONE); videoModel.setClicked(true); videoModel.save(); } mItemClickListener.onItemClick(videoModel); } } }); } else { holder.contentLayout2.setVisibility(View.INVISIBLE); } holder.title.setText(contentVideoModelList2.get(position).getNavModel().getTitle()); holder.moreBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { BusProvider.getInstance().post(new ContentItemEven(null, contentVideoModelList2.get(position).getNavModel(), 2, position)); } }); }
/** * @function 头部以下内容——类型2——SHOW_DATA * @author mootor * created at 2016/8/17 11:52 */ protected void updateHolder(ContentViewHolder2 holder, VideoModel model, int item, long navId) { SpannableStringBuilder textString = null; keyword = Valuepass.newInstance().getKeywordsearch(); if (keyword != null) { textString = TextUtilTools.highlight(model.getTitle(), keyword); } else { textString = new SpannableStringBuilder(model.getTitle()); } if (item == 1) { holder.text1.setText(textString); holder.audioImg1.setVisibility(View.GONE); holder.topicImg1.setVisibility(View.GONE); } else { holder.text2.setText(textString); holder.audioImg2.setVisibility(View.GONE); holder.topicImg2.setVisibility(View.GONE); } if (navId != AUDIO_ID && navId != SUBJECT_ID) { if (model.getIsVip() == 1 /*&& !UserDBUtil.getInstance(context).isNeedLogin()*/) {// vip if (item == 1) { holder.topicImg1.setImageResource(R.drawable.corner_vip); holder.topicImg1.setVisibility(View.VISIBLE); } else { holder.topicImg2.setImageResource(R.drawable.corner_vip); holder.topicImg2.setVisibility(View.VISIBLE); } } else if (StorageHelper.isAudioRes(model)) {// 音频 if (item == 1) { holder.audioImg1.setVisibility(View.VISIBLE); } else { holder.audioImg2.setVisibility(View.VISIBLE); } } else if (model.getType() == CommonConstant.TOPIC_TYPE) {// topic if (item == 1) { holder.topicImg1.setImageResource(R.drawable.home_topic); holder.topicImg1.setVisibility(View.VISIBLE); } else { holder.topicImg2.setImageResource(R.drawable.home_topic); holder.topicImg2.setVisibility(View.VISIBLE); } } } if (model.isClicked()) { if (item == 1) { holder.newVideoImg1.setVisibility(View.GONE); } else { holder.newVideoImg2.setVisibility(View.GONE); } } else { if (item == 1) { holder.newVideoImg1.setVisibility(View.VISIBLE); } else { holder.newVideoImg2.setVisibility(View.VISIBLE); } } }
/** * @author mootor * created at 2016/8/17 11:40 * @function 头部以下内容——类型2——VIEW */ public class ContentViewHolder2 extends RecyclerView.ViewHolder { private LinearLayout content_layout; private RelativeLayout contentLayout1; private RelativeLayout contentLayout2; private TextView title; private ImageView moreBtn; private ImageView img1; private TextView text1; private ImageView audioImg1; private ImageView newVideoImg1; private ImageView topicImg1; private ImageView img2; private TextView text2; private ImageView audioImg2; private ImageView newVideoImg2; private ImageView topicImg2; public ContentViewHolder2(View itemView) { super(itemView); content_layout = (LinearLayout) itemView.findViewById(R.id.content_layout); contentLayout1 = (RelativeLayout) itemView.findViewById(R.id.content_layout1); contentLayout2 = (RelativeLayout) itemView.findViewById(R.id.content_layout2); title = (TextView) itemView.findViewById(R.id.titleTv); moreBtn = (ImageView) itemView.findViewById(R.id.moreBtn); img1 = (ImageView) itemView.findViewById(R.id.content_img1); text1 = (TextView) itemView.findViewById(R.id.content_text1); audioImg1 = (ImageView) itemView.findViewById(R.id.audio_mark_img1); newVideoImg1 = (ImageView) itemView.findViewById(R.id.new_video_img1); topicImg1 = (ImageView) itemView.findViewById(R.id.topic_img1); img2 = (ImageView) itemView.findViewById(R.id.content_img2); text2 = (TextView) itemView.findViewById(R.id.content_text2); audioImg2 = (ImageView) itemView.findViewById(R.id.audio_mark_img2); newVideoImg2 = (ImageView) itemView.findViewById(R.id.new_video_img2); topicImg2 = (ImageView) itemView.findViewById(R.id.topic_img2); } }
/** * @author mootor * created at 2016/8/17 11:55 * @function 头部——单张大图——VIEW */ private class HeaderViewHolderWithImager extends RecyclerView.ViewHolder { RelativeLayout headerLayout; ImageView img; TextView text; ImageView audioImg; ImageView newVideoImg; ImageView topicImg; public HeaderViewHolderWithImager(View itemView) { super(itemView); headerLayout = (RelativeLayout) itemView.findViewById(R.id.header_box); img = (ImageView) itemView.findViewById(R.id.content_img); text = (TextView) itemView.findViewById(R.id.content_text); audioImg = (ImageView) itemView.findViewById(R.id.audio_mark_img); newVideoImg = (ImageView) itemView.findViewById(R.id.new_video_img); topicImg = (ImageView) itemView.findViewById(R.id.topic_img); headerLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mItemClickListener != null) { newVideoImg.setVisibility(View.GONE); VideoModel videoModel = heardVideoList.get(0); mItemClickListener.onItemClick(videoModel); } } }); } }
/** * @author mootor * created at 2016/8/17 11:56 * @function 头部轮播——VIEW */ public class HeaderViewHolderWithViewPager extends RecyclerView.ViewHolder { private ViewPager viewPager; private TextView topAdTextView; private LinearLayout topAdDotLayout; private ImageView topToLeftBtn, topToRightBtn; public HeaderViewHolderWithViewPager(View itemView) { super(itemView); viewPager = (ViewPager) itemView.findViewById(R.id.viewPager); topAdTextView = (TextView) itemView.findViewById(R.id.tv_intro); topAdDotLayout = (LinearLayout) itemView.findViewById(R.id.dot_layout); topToLeftBtn = (ImageView) itemView.findViewById(R.id.topic_left_img); topToRightBtn = (ImageView) itemView.findViewById(R.id.topic_right_img); topToLeftBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (viewPager != null && heardVideoList.size() > 1) { viewPager.setCurrentItem(currentItemPosition - 1); } } }); topToRightBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (viewPager != null && heardVideoList.size() > 1) { viewPager.setCurrentItem(currentItemPosition + 1); } } }); try {//这里设置轮播切换过程的缓冲时间500毫秒 Field field = ViewPager.class.getDeclaredField("mScroller"); field.setAccessible(true); ViewPagerScroller scroller = new ViewPagerScroller(context, new AccelerateInterpolator()); field.set(viewPager, scroller); scroller.setmDuration(500); } catch (Exception e) { } } } /** * @author mootor * created at 2016/8/17 11:56 * @function 头部以下内容——类型1——VIEW */ protected class ContentViewHolder1 extends RecyclerView.ViewHolder { public ImageView img, audioImg, newVideoImg, topicImg; public TextView text; public RelativeLayout layout;
public ContentViewHolder1(View itemView) { super(itemView); layout = (RelativeLayout) itemView.findViewById(R.id.layout); img = (ImageView) itemView.findViewById(R.id.content_img); text = (TextView) itemView.findViewById(R.id.content_text); audioImg = (ImageView) itemView.findViewById(R.id.audio_mark_img); newVideoImg = (ImageView) itemView.findViewById(R.id.new_video_img); topicImg = (ImageView) itemView.findViewById(R.id.topic_img); layout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mItemClickListener != null) { newVideoImg.setVisibility(View.GONE); VideoModel videoModel = contentVideoModelList1.get(heardVideoList == null ? getPosition() : heardVideoList.size() > 0 ? getPosition() - 1 : getPosition()); mItemClickListener.onItemClick(videoModel); videoModel.setClicked(true); videoModel.save(); } } }); } }
/** * @author mootor * created at 2016/8/17 11:54 * @function item点击监听 */ public interface MyItemClickListener { void onItemClick(VideoModel videoModel); }
/** * 初始化dot——头部轮播 */ private void initDots(HeaderViewHolderWithViewPager viewHolder) { for (int i = 0; i < heardVideoList.size(); i++) { View view = new View(context); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(15, 15); if (i != 0) { params.leftMargin = 8; } view.setLayoutParams(params); view.setBackgroundResource(R.drawable.selector_dot); if (i != 0) { view.setEnabled(false); } viewHolder.topAdDotLayout.addView(view); } } /** * 更新文本——头部轮播 */ private void updateIntroAndDot(HeaderViewHolderWithViewPager view) { try { int currentPage = view.viewPager.getCurrentItem() % heardVideoList.size(); view.topAdTextView.setText(heardVideoList.get(currentPage).getTitle()); for (int i = 0; i < view.topAdDotLayout.getChildCount(); i++) { view.topAdDotLayout.getChildAt(i).setEnabled(i == currentPage); } } catch (Exception e) { } }
}
等待最终的解决办法!
看你的代码 没有做 缓存啊
你的布局是什么
你好,我做过比这个更稍微复杂的效果,不过也是ViewPager+Fragment的组合,里面也是头部轮播图+列表,不过我们是动态的,针对ViewPager+Fragment这个组合效果的话,一般网上好多建议是
1.Fragment采用懒加载方式
2.尽量使用FragmentStateAdapter(具体原因,你可以百度)
3.使用缓存机制避免重复的网络请求
4.延迟进行网络请求
5.使用一些比较出色的开源框架,比如图片框架可以使用性能出色的Fresco。
6.就是一些基础的知识点,比如尽量避免UI线程中过多耗时操作,
7.就是Fragment的一些基础知识,比如生命周期控制(避免出现内存泄露或者是空指针),然后可以进行状态保存
这些是暂时能想到的,我当时采用了这些方式,效果在低端机上还可以,