如何在android中获取焦点延迟加载?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
package com.longmaster.iptv.health.DoctorP2P.mode;import android.content.Context;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.KeyEvent;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.RelativeLayout;import com.longmaster.iptv.health.R;import com.longmaster.iptv.health.common.Constants;import com.longmaster.iptv.health.widget.MagicTextView.MagicTextView;import org.VideoWebInterface.DepartmentParam;import java.util.ArrayList;import java.util.List;import java.util.Timer;import java.util.TimerTask;import cn.longmaster.lmkit.event.MessageProxy;import cn.longmaster.lmkit.utils.AppLogger;public class ButtonAdapter extends RecyclerView.Adapter<ButtonAdapter.MyViewHolder> { private List<DepartmentParam> mDepartmentList = new ArrayList<>(); private LayoutInflater mInflater; private Context mContext; private boolean mIsLostFocus = false; private LinearLayoutManager mLinearLayoutManager; private RecyclerView mRecyclerView; private TimerTask mTimerTask; private Timer mTimer; private boolean isLoadData = true; public ButtonAdapter(Context context) { super(); this.mContext = context; mInflater = LayoutInflater.from(context); } public void setLayoutManager(LinearLayoutManager linearLayoutManager, RecyclerView re) { mLinearLayoutManager = linearLayoutManager; mRecyclerView = re; } public void setDepartmentList(List list) { mDepartmentList = list; } public void setFocus(boolean isFocus) { mIsLostFocus = isFocus; } public void setIsLoadData(boolean isLoadData) { this.isLoadData = isLoadData; } public void clear() { mDepartmentList.clear(); } @Override public int getItemCount() { return mDepartmentList.size(); } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { holder.tv.setText(mDepartmentList.get(position).GetDeptName()); holder.tv.setFocusable(true); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(R.layout.list_class_item, parent, false); MyViewHolder holder = new MyViewHolder(view); return holder; } class MyViewHolder extends RecyclerView.ViewHolder { MagicTextView tv; RelativeLayout mOuterBgRL; public MyViewHolder(final View view) { super(view); RecyclerView.LayoutParams param = (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(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { mOuterBgRL.setBackgroundResource(R.drawable.p2p_select); if (isLoadData) { mTimerTask = new TimerTask() { @Override public void run() { int iPosition = getAdapterPosition(); DepartmentParam departmentParam = mDepartmentList.get(iPosition); MessageProxy.sendMessage(Constants.Message.P2P_SELECTION_DOCTOR_CLASS, iPosition, departmentParam); } }; mTimer = new Timer(); mTimer.schedule(mTimerTask, 500); } } else { clearTimer(); if (mIsLostFocus) { mOuterBgRL.setBackgroundResource(R.drawable.p2p_unselect); } } } }); tv.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { int mCurrentSelectPosition = getAdapterPosition(); int mDepartmentCount = mDepartmentList.size(); AppLogger.e("mCurrentSelectPosition>>>>>>>>", mCurrentSelectPosition + "----" + mDepartmentCount); switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: setIsLoadData(true); setFocus(true); if (mCurrentSelectPosition == (mLinearLayoutManager.findFirstVisibleItemPosition())) { mRecyclerView.smoothScrollBy(-400, 0); } View view1 = mLinearLayoutManager.findViewByPosition(mCurrentSelectPosition - 1); if (view1 != null) { setViewFocus(view1.findViewById(R.id.class_name)); } return true; case KeyEvent.KEYCODE_DPAD_RIGHT: if (mCurrentSelectPosition == mDepartmentCount - 1) { return true; } setIsLoadData(true); setFocus(true); if (mCurrentSelectPosition == (mLinearLayoutManager.findLastVisibleItemPosition())) { mRecyclerView.smoothScrollBy(400, 0); } View view = mLinearLayoutManager.findViewByPosition(mCurrentSelectPosition + 1); if (view != null) { setViewFocus(view.findViewById(R.id.class_name)); } return true; case KeyEvent.KEYCODE_BACK: break; case KeyEvent.KEYCODE_DPAD_UP: break; case KeyEvent.KEYCODE_DPAD_DOWN: setFocus(false); mOuterBgRL.setBackgroundResource(R.drawable.p2p_key_down); break; } } return false; } }); } } public void setViewFocus(View view) { view.setFocusable(true); view.setFocusableInTouchMode(true); view.requestFocus(); view.requestFocusFromTouch(); } private void clearTimer() { if (mTimer != null) { mTimer.cancel(); } if (mTimerTask != null) { mTimerTask.cancel(); } }}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。