激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android TV開發:使用RecycleView實現橫向的Listview并響應點擊事件的代碼

Android TV開發:使用RecycleView實現橫向的Listview并響應點擊事件的代碼

2022-02-20 15:32meetings Android

這篇文章主要介紹了Android TV開發:使用RecycleView實現橫向的Listview并響應點擊事件的代碼,具有很好的參考價值,希望對大家有所幫助,一起跟隨小編過來看看吧

本文講述了Android TV開發:使用RecycleView實現橫向的Listview并響應點擊事件的代碼。分享給大家供大家參考,具體如下:

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

Android TV開發:使用RecycleView實現橫向的Listview并響應點擊事件的代碼

2.關于點擊事件的實現細節

核心:使用接口回調

在adapter中自己定義了個接口,然后在onBindViewHolder中去為holder.itemView去設置相應的監聽最后回調我們設置的監聽。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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));
 // 如果設置了回調,則設置點擊事件
 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設置監聽,并實現接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.實現橫向效果  

核心:LinearLayoutManager

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

4. 讓RecyclerView的子item獲得焦點

?
1
2
3
4
5
6
7
8
9
10
mRecyclerView.setOnFocusChangeListener(new OnFocusChangeListener() {
  @Override
  public void onFocusChange(View v, boolean hasFocus) {
  if(hasFocus){
   if(mRecyclerView.getChildCount()>0){
   mRecyclerView.getChildAt(0).requestFocus();
   }
  }
  }
 });

5.代碼實現:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//定義自己的布局文件
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);
 //設置適配器
 mAdapter = new MyAdapter( mContext,mDatas);
 mRecyclerView.setAdapter(mAdapter);
 //監聽點擊事件
 mAdapter.setmOnItemClickLitener(new MyAdapter.OnItemClickLitener() {
  @Override
  public void onItemClick(View view, int position) {
  Toast.makeText(mContext,"點擊了圖片:"+position,Toast.LENGTH_SHORT).show();
  }
 });
 
 //讓RecyclerView的子item獲得焦點
 mRecyclerView.setOnFocusChangeListener(new OnFocusChangeListener() {
  @Override
  public void onFocusChange(View v, boolean hasFocus) {
  if(hasFocus){
   if(mRecyclerView.getChildCount()>0){
   mRecyclerView.getChildAt(0).requestFocus();
   }
  }
  }
 });
 }
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//定義適配器類
 public static class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
 {
 private Context mContext;
 private List<String> mDatas;
 private LayoutInflater mInflater;
 private OnItemClickLitener mOnItemClickLitener;
 //定義點擊事件的接口
 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();
 }
 /**
  * 創建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;
 }
 /**
  * 設置值
  */
 @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);
  //設置回調
  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);
  }
 }
 }
?
1
2
3
4
5
6
7
8
9
//在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文件

?
1
2
3
4
5
6
7
8
9
<?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

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://blog.csdn.net/meetings/article/details/52926720

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中国洗澡偷拍在线播放 | 日本在线高清 | 亚洲男人的天堂在线视频 | 欧美成人一级视频 | 日本在线播放一区二区三区 | 成人免费视频 | 国产免费传媒av片在线 | 免费久久精品 | 国产青草视频在线观看 | 欧美日韩在线播放一区 | 一级@片 | 天天艹综合 | 亚洲av一级毛片特黄大片 | 免费播放欧美毛片 | 牛牛热这里只有精品 | 欧美a级大胆视频 | 久久久成人免费视频 | av在线成人| 国产在线观看福利 | 黄色片在线免费播放 | 国产精品久久久久久久久久东京 | 色就操 | 亚洲日本韩国精品 | 欧产日产国产精品乱噜噜 | 色综合久久久久综合99 | 91在线色 | 国内成人自拍视频 | av电影在线免费观看 | 奇米影视奇奇米色狠狠色777 | 香蕉视频1024 | 久操伊人 | 国产精品久久久久久久模特 | 欧美a在线看 | 久久久人成影片一区二区三区 | 黄色一级片在线免费观看 | 久久亚洲国产精品 | 国产亚洲黑人性受xxxx精品 | 一级网站| 亚洲成人播放 | 色婷婷综合久久久久中文 | av噜噜噜噜 |