国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android TV開發(fā):使用RecycleView實(shí)現(xiàn)橫向的Listview并響應(yīng)點(diǎn)擊事件的代碼

2019-12-12 00:54:04
字體:
供稿:網(wǎng)友

本文講述了Android TV開發(fā):使用RecycleView實(shí)現(xiàn)橫向的Listview并響應(yīng)點(diǎn)擊事件的代碼。分享給大家供大家參考,具體如下:

1.先貼出自己的效果圖(可橫向滾動,并響應(yīng)item點(diǎn)擊事件):

2.關(guān)于點(diǎn)擊事件的實(shí)現(xiàn)細(xì)節(jié)

核心:使用接口回調(diào)

在adapter中自己定義了個接口,然后在onBindViewHolder中去為holder.itemView去設(shè)置相應(yīng)的監(jiān)聽最后回調(diào)我們設(shè)置的監(jiān)聽。

class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> { //...  public interface OnItemClickLitener  {  void onItemClick(View view, int position);  void onItemLongClick(View view , int position);  }  private OnItemClickLitener mOnItemClickLitener;  public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)  {  this.mOnItemClickLitener = mOnItemClickLitener;  }  @Override  public void onBindViewHolder(final MyViewHolder holder, final int position)  {  holder.tv.setText(mDatas.get(position));  // 如果設(shè)置了回調(diào),則設(shè)置點(diǎn)擊事件  if (mOnItemClickLitener != null)  {   holder.itemView.setOnClickListener(new OnClickListener()   {   @Override   public void onClick(View v)   {    int pos = holder.getLayoutPosition();    mOnItemClickLitener.onItemClick(holder.itemView, pos);   }   });   holder.itemView.setOnLongClickListener(new OnLongClickListener()   {   @Override   public boolean onLongClick(View v)   {    int pos = holder.getLayoutPosition();    mOnItemClickLitener.onItemLongClick(holder.itemView, pos);    return false;   }   });  }  } //... } 

在activity設(shè)置監(jiān)聽,并實(shí)現(xiàn)接口

mAdapter.setOnItemClickLitener(new OnItemClickLitener()  {   @Override   public void onItemClick(View view, int position)   {   Toast.makeText(HomeActivity.this, position + " click",    Toast.LENGTH_SHORT).show();   }   @Override   public void onItemLongClick(View view, int position)   {   Toast.makeText(HomeActivity.this, position + " long click",    Toast.LENGTH_SHORT).show();    mAdapter.removeData(position);   }  }); 

3.實(shí)現(xiàn)橫向效果  

核心:LinearLayoutManager

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false); mRecyclerView.setLayoutManager(linearLayoutManager); 

4. 讓RecyclerView的子item獲得焦點(diǎn)

mRecyclerView.setOnFocusChangeListener(new OnFocusChangeListener() {   @Override   public void onFocusChange(View v, boolean hasFocus) {   if(hasFocus){    if(mRecyclerView.getChildCount()>0){    mRecyclerView.getChildAt(0).requestFocus();    }   }   }  });

5.代碼實(shí)現(xiàn):

//定義自己的布局文件 public class EasyLayout extends LinearLayout{  private MyAdapter mAdapter;  private RecyclerView mRecyclerView;  private Context mContext;  private List<String> mDatas;  public EasyLayout(Context context) {  super(context);  mDatas = new ArrayList<String>();  for (int i=0;i<20;i++){   String str = "圖片:"+i;   mDatas.add(str);  }  this.setBackgroundColor(Color.parseColor("#407EAf"));  this.mContext = context;  this.setOrientation(VERTICAL);  createLayout();  }  private void createLayout() {  //空出上邊留白  TextView te = new TextView(mContext);  ViewGroup.LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,160);  this.addView(te,lp);  mRecyclerView = new RecyclerView(mContext);  lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);  this.addView(mRecyclerView,lp);   LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false);  mRecyclerView.setLayoutManager(linearLayoutManager);  //設(shè)置適配器  mAdapter = new MyAdapter( mContext,mDatas);  mRecyclerView.setAdapter(mAdapter);  //監(jiān)聽點(diǎn)擊事件  mAdapter.setmOnItemClickLitener(new MyAdapter.OnItemClickLitener() {   @Override   public void onItemClick(View view, int position) {   Toast.makeText(mContext,"點(diǎn)擊了圖片:"+position,Toast.LENGTH_SHORT).show();   }  });   //讓RecyclerView的子item獲得焦點(diǎn)  mRecyclerView.setOnFocusChangeListener(new OnFocusChangeListener() {   @Override   public void onFocusChange(View v, boolean hasFocus) {   if(hasFocus){    if(mRecyclerView.getChildCount()>0){    mRecyclerView.getChildAt(0).requestFocus();    }   }   }  });  } 
//定義適配器類  public static class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>  {  private Context mContext;  private List<String> mDatas;  private LayoutInflater mInflater;  private OnItemClickLitener mOnItemClickLitener;  //定義點(diǎn)擊事件的接口  public interface OnItemClickLitener  {   void onItemClick(View view, int position);  }  public MyAdapter( Context mContext,List<String> datats)  {   this.mContext = mContext;   this.mDatas = datats;   mInflater = LayoutInflater.from(this.mContext);  }  public void setmOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)  {   this.mOnItemClickLitener = mOnItemClickLitener;  }  @Override  public int getItemCount()  {   return mDatas.size();  }  /**   * 創(chuàng)建ViewHolder   */  @Override  public ViewHolder onCreateViewHolder(ViewGroup parent, int i)  {   View view = mInflater.inflate(R.layout.easy_item,null);   ViewHolder viewHolder = new ViewHolder(view);   return viewHolder;  }  /**   * 設(shè)置值   */  @Override  public void onBindViewHolder(final ViewHolder viewHolder, final int position)  {   viewHolder.btn.setText(mDatas.get(position));   viewHolder.btn.setTextSize(40);   viewHolder.btn.setGravity(Gravity.CENTER);   //設(shè)置回調(diào)   if (mOnItemClickLitener != null){   viewHolder.btn.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {    int pos = viewHolder.getLayoutPosition();    mOnItemClickLitener.onItemClick( viewHolder.btn,pos);    }   });   }  }  public class ViewHolder extends RecyclerView.ViewHolder //我們需要inflate的item布局需要傳入  {   Button btn;   public ViewHolder(View arg0)   {   super(arg0);   btn = (Button) arg0.findViewById(R.id.btn);   }  }  } 
//在activity加載自己的布局 public class GallarRecyActivity extends AppCompatActivity {  @Override  protected void onCreate(@Nullable Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  EasyLayout easyLayout = new EasyLayout(this);  setContentView(easyLayout);  } } 

easy_item.xml文件

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:orientation="horizontal" android:layout_width="match_parent"  android:layout_height="match_parent">  <Button  android:id="@+id/btn"  android:layout_width="320dp"  android:layout_height="430dp" /> </LinearLayout>

6.源碼及apk

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊金霍洛旗| 鄂托克前旗| 新泰市| 泽库县| 建瓯市| 正镶白旗| 多伦县| 岳普湖县| 鹤壁市| 乐亭县| 武夷山市| 丹巴县| 观塘区| 朔州市| 射阳县| 扎兰屯市| 安化县| 喜德县| 华池县| 建瓯市| 闽清县| 通榆县| 天水市| 抚州市| 阜城县| 正镶白旗| 涟水县| 梅州市| 平凉市| 鄢陵县| 新化县| 会理县| 临沭县| 新蔡县| 陆河县| 手机| 衡阳市| 湘西| 醴陵市| 云和县| 胶南市|