您好,登錄后才能下訂單哦!
如何在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; /** * Created by yzq on 2017/5/8 */ 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(); } } }
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。