android实现按钮获取焦点延迟加载
看到京东电视app的按钮获取焦点后才加载数据,之前网上没找到好的说法,所以自己实现了记录一下以便后续学习。
主要是按钮获取焦点以后,初始化一个定时器Timer延迟500ms加载数据,如果失去焦点,取消这个定时器就ok了。其实原理很简单,下面是我实现的一个效果。
packagecom.longmaster.iptv.health.DoctorP2P.mode; importandroid.content.Context; importandroid.support.v7.widget.LinearLayoutManager; importandroid.support.v7.widget.RecyclerView; importandroid.view.KeyEvent; importandroid.view.LayoutInflater; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.LinearLayout; importandroid.widget.RelativeLayout; importcom.longmaster.iptv.health.R; importcom.longmaster.iptv.health.common.Constants; importcom.longmaster.iptv.health.widget.MagicTextView.MagicTextView; importorg.VideoWebInterface.DepartmentParam; importjava.util.ArrayList; importjava.util.List; importjava.util.Timer; importjava.util.TimerTask; importcn.longmaster.lmkit.event.MessageProxy; importcn.longmaster.lmkit.utils.AppLogger; /** *Createdbyyzqon2017/5/8 */ publicclassButtonAdapterextendsRecyclerView.Adapter{ privateList mDepartmentList=newArrayList<>(); privateLayoutInflatermInflater; privateContextmContext; privatebooleanmIsLostFocus=false; privateLinearLayoutManagermLinearLayoutManager; privateRecyclerViewmRecyclerView; privateTimerTaskmTimerTask; privateTimermTimer; privatebooleanisLoadData=true; publicButtonAdapter(Contextcontext){ super(); this.mContext=context; mInflater=LayoutInflater.from(context); } publicvoidsetLayoutManager(LinearLayoutManagerlinearLayoutManager,RecyclerViewre){ mLinearLayoutManager=linearLayoutManager; mRecyclerView=re; } publicvoidsetDepartmentList(Listlist){ mDepartmentList=list; } publicvoidsetFocus(booleanisFocus){ mIsLostFocus=isFocus; } publicvoidsetIsLoadData(booleanisLoadData){ this.isLoadData=isLoadData; } publicvoidclear(){ mDepartmentList.clear(); } @Override publicintgetItemCount(){ returnmDepartmentList.size(); } @Override publicvoidonBindViewHolder(finalMyViewHolderholder,finalintposition){ holder.tv.setText(mDepartmentList.get(position).GetDeptName()); holder.tv.setFocusable(true); } @Override publicMyViewHolderonCreateViewHolder(ViewGroupparent,intviewType){ Viewview=mInflater.inflate(R.layout.list_class_item,parent,false); MyViewHolderholder=newMyViewHolder(view); returnholder; } classMyViewHolderextendsRecyclerView.ViewHolder{ MagicTextViewtv; RelativeLayoutmOuterBgRL; publicMyViewHolder(finalViewview){ super(view); RecyclerView.LayoutParamsparam=(RecyclerView.LayoutParams)itemView.getLayoutParams(); param.height=LinearLayout.LayoutParams.WRAP_CONTENT; param.width=LinearLayout.LayoutParams.MATCH_PARENT; itemView.setVisibility(View.VISIBLE); tv=(MagicTextView)view.findViewById(R.id.class_name); mOuterBgRL=(RelativeLayout)view.findViewById(R.id.rl_class_outer_bg); tv.setOnFocusChangeListener(newView.OnFocusChangeListener(){ @Override publicvoidonFocusChange(Viewv,booleanhasFocus){ if(hasFocus){ mOuterBgRL.setBackgroundResource(R.drawable.p2p_select); if(isLoadData){ mTimerTask=newTimerTask(){ @Override publicvoidrun(){ intiPosition=getAdapterPosition(); DepartmentParamdepartmentParam=mDepartmentList.get(iPosition); MessageProxy.sendMessage(Constants.Message.P2P_SELECTION_DOCTOR_CLASS,iPosition,departmentParam); } }; mTimer=newTimer(); mTimer.schedule(mTimerTask,500); } }else{ clearTimer(); if(mIsLostFocus){ mOuterBgRL.setBackgroundResource(R.drawable.p2p_unselect); } } } }); tv.setOnKeyListener(newView.OnKeyListener(){ @Override publicbooleanonKey(Viewv,intkeyCode,KeyEventevent){ if(event.getAction()==KeyEvent.ACTION_DOWN){ intmCurrentSelectPosition=getAdapterPosition(); intmDepartmentCount=mDepartmentList.size(); AppLogger.e("mCurrentSelectPosition>>>>>>>>",mCurrentSelectPosition+"----"+mDepartmentCount); switch(keyCode){ caseKeyEvent.KEYCODE_DPAD_LEFT: setIsLoadData(true); setFocus(true); if(mCurrentSelectPosition==(mLinearLayoutManager.findFirstVisibleItemPosition())){ mRecyclerView.smoothScrollBy(-400,0); } Viewview1=mLinearLayoutManager.findViewByPosition(mCurrentSelectPosition-1); if(view1!=null){ setViewFocus(view1.findViewById(R.id.class_name)); } returntrue; caseKeyEvent.KEYCODE_DPAD_RIGHT: if(mCurrentSelectPosition==mDepartmentCount-1){ returntrue; } setIsLoadData(true); setFocus(true); if(mCurrentSelectPosition==(mLinearLayoutManager.findLastVisibleItemPosition())){ mRecyclerView.smoothScrollBy(400,0); } Viewview=mLinearLayoutManager.findViewByPosition(mCurrentSelectPosition+1); if(view!=null){ setViewFocus(view.findViewById(R.id.class_name)); } returntrue; caseKeyEvent.KEYCODE_BACK: break; caseKeyEvent.KEYCODE_DPAD_UP: break; caseKeyEvent.KEYCODE_DPAD_DOWN: setFocus(false); mOuterBgRL.setBackgroundResource(R.drawable.p2p_key_down); break; } } returnfalse; } }); } } publicvoidsetViewFocus(Viewview){ view.setFocusable(true); view.setFocusableInTouchMode(true); view.requestFocus(); view.requestFocusFromTouch(); } privatevoidclearTimer(){ if(mTimer!=null){ mTimer.cancel(); } if(mTimerTask!=null){ mTimerTask.cancel(); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。