我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android RecyclerView实现下拉列表功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android RecyclerView实现下拉列表功能

现在市面上的很多的应用,都带有下拉列表的功能,将所有选项都放在下拉列表中,当用户点击选择的时候,弹出所有的选项,用户选择一项后,下拉列表自动隐藏,很多下拉列表都是用ListView + PopupWindow来实现的,由于Google推出了替代ListView的RecyclerView,所以简单实现一下:

MainActivity.java


package com.jackie.countdowntimer; 
import android.graphics.drawable.BitmapDrawable; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.PopupWindow; 
import java.util.ArrayList; 
import java.util.List; 
public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
  private EditText mNumberEditText; 
  private ImageButton mSelectImageButton; 
  private PopupWindow mPopupWindow; 
  private RecyclerView mRecyclerView; 
  private RecyclerViewAdapter mRecyclerViewAdapter; 
  private List<String> mNumberList; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
            .setAction("Action", null).show(); 
      } 
    }); 
    //初始化数据 
    mNumberList = new ArrayList<>(); 
    for (int i = 0; i < 30; i++) { 
      mNumberList.add("1000000" + i); 
    } 
    mNumberEditText = (EditText) findViewById(R.id.number); 
    mSelectImageButton = (ImageButton) findViewById(R.id.select_number); 
    mSelectImageButton.setOnClickListener(this); 
  } 
  @Override 
  public void onClick(View v) { 
    switch (v.getId()) { 
      case R.id.select_number: 
        showSelectNumberPopupWindow(); 
        break; 
    } 
  } 
   
  private void showSelectNumberPopupWindow() { 
    initRecyclerView(); 
    mPopupWindow = new PopupWindow(mRecyclerView, mNumberEditText.getWidth() - 4, 200); 
    mPopupWindow.setOutsideTouchable(true);   // 设置外部可以被点击 
    mPopupWindow.setBackgroundDrawable(new BitmapDrawable()); 
    mPopupWindow.setFocusable(true);    // 使PopupWindow可以获得焦点 
    // 显示在输入框的左下角 
    mPopupWindow.showAsDropDown(mNumberEditText, 2, -5); 
  } 
   
  private void initRecyclerView(){ 
    mRecyclerView = new RecyclerView(this); 
    //设置布局管理器 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    mRecyclerView.setBackgroundResource(R.drawable.background); 
    //设置Adapter 
    mRecyclerViewAdapter = new RecyclerViewAdapter(this, mNumberList); 
    mRecyclerView.setAdapter(mRecyclerViewAdapter); 
    //设置点击事件 
    mRecyclerViewAdapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener() { 
      @Override 
      public void onItemClick(View view, int position) { 
        mNumberEditText.setText(mNumberList.get(position)); 
        mNumberEditText.setSelection(mNumberEditText.getText().toString().length()); 
        mPopupWindow.dismiss(); 
      } 
    }); 
    //添加分割线 
    mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); 
  } 
 } 

 RecyclerViewAdapter.java


package com.jackie.countdowntimer; 
import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageButton; 
import android.widget.TextView; 
import java.util.List; 
 
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder> { 
  private OnItemClickListener mOnItemClickListener; 
  private Context mContext; 
  private List<String> mNumberList; 
  public RecyclerViewAdapter(Context context, List<String> numberList) { 
    this.mContext = context; 
    this.mNumberList = numberList; 
  } 
  public interface OnItemClickListener { 
    void onItemClick(View view, int position); 
  } 
  public void setOnItemClickListener(OnItemClickListener onItemClickListener) { 
    this.mOnItemClickListener = onItemClickListener; 
  } 
  @Override 
  public RecyclerViewAdapter.RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    RecyclerViewHolder holder = new RecyclerViewHolder(LayoutInflater.from(mContext).inflate(R.layout.number_item, parent, false)); 
    return holder; 
  } 
  @Override 
  public void onBindViewHolder(final RecyclerViewAdapter.RecyclerViewHolder holder, final int position) { 
    holder.numberTextView.setText(mNumberList.get(position)); 
    // 如果设置了回调,则设置点击事件 
    if (mOnItemClickListener != null) { 
      holder.numberTextView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
          mOnItemClickListener.onItemClick(holder.itemView, holder.getLayoutPosition()); 
        } 
      }); 
    } 
    holder.deleteImageButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        mNumberList.remove(position); 
        //通知刷新 
        notifyItemRemoved(position); 
      } 
    }); 
  } 
  @Override 
  public int getItemCount() { 
    return mNumberList.size(); 
  } 
  public class RecyclerViewHolder extends RecyclerView.ViewHolder { 
    TextView numberTextView; 
    ImageButton deleteImageButton; 
    public RecyclerViewHolder(View itemView) { 
      super(itemView); 
      numberTextView = (TextView) itemView.findViewById(R.id.number_item); 
      deleteImageButton = (ImageButton) itemView.findViewById(R.id.number_item_delete); 
    } 
  } 
} 

 DividerItemDecoration.java


package com.jackie.countdowntimer; 
 
import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Canvas; 
import android.graphics.Rect; 
import android.graphics.drawable.Drawable; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.View; 
 
public class DividerItemDecoration extends RecyclerView.ItemDecoration { 
  private static final int[] ATTRS = new int[]{ 
      android.R.attr.listDivider 
  }; 
  public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; 
  public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; 
  private Drawable mDivider; 
  private int mOrientation; 
  public DividerItemDecoration(Context context, int orientation) { 
    final TypedArray a = context.obtainStyledAttributes(ATTRS); 
    mDivider = a.getDrawable(0); 
    a.recycle(); 
    setOrientation(orientation); 
  } 
  public void setOrientation(int orientation) { 
    if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { 
      throw new IllegalArgumentException("invalid orientation"); 
    } 
    mOrientation = orientation; 
  } 
  @Override 
  public void onDraw(Canvas c, RecyclerView parent) { 
    if (mOrientation == VERTICAL_LIST) { 
      drawVertical(c, parent); 
    } else { 
      drawHorizontal(c, parent); 
    } 
  } 
  public void drawVertical(Canvas c, RecyclerView parent) { 
    final int left = parent.getPaddingLeft(); 
    final int right = parent.getWidth() - parent.getPaddingRight(); 
    final int childCount = parent.getChildCount(); 
    for (int i = 0; i < childCount; i++) { 
      final View child = parent.getChildAt(i); 
      android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext()); 
      final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); 
      final int top = child.getBottom() + params.bottomMargin; 
      final int bottom = top + mDivider.getIntrinsicHeight(); 
      mDivider.setBounds(left, top, right, bottom); 
      mDivider.draw(c); 
    } 
  } 
  public void drawHorizontal(Canvas c, RecyclerView parent) { 
    final int top = parent.getPaddingTop(); 
    final int bottom = parent.getHeight() - parent.getPaddingBottom(); 
    final int childCount = parent.getChildCount(); 
    for (int i = 0; i < childCount; i++) { 
      final View child = parent.getChildAt(i); 
      final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); 
      final int left = child.getRight() + params.rightMargin; 
      final int right = left + mDivider.getIntrinsicHeight(); 
      mDivider.setBounds(left, top, right, bottom); 
      mDivider.draw(c); 
    } 
  } 
  @Override 
  public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { 
    if (mOrientation == VERTICAL_LIST) { 
      outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); 
    } else { 
      outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); 
    } 
  } 
} 

效果图如下:

您可能感兴趣的文章:Android中RecyclerView实现多级折叠列表效果(二)Android中RecyclerView实现多级折叠列表效果(TreeRecyclerView)RecyclerView实现常见的列表菜单Android单个RecyclerView实现列表嵌套的效果Android使用RecyclerView实现自定义列表、点击事件以及下拉刷新Android RecyclerView实现数据列表展示效果Android使用RecyclerView实现列表数据选择操作android实现RecyclerView列表单选功能Android基于RecyclerView实现高亮搜索列表使用RecyclerView实现水平列表


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android RecyclerView实现下拉列表功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android RecyclerView实现下拉列表功能

现在市面上的很多的应用,都带有下拉列表的功能,将所有选项都放在下拉列表中,当用户点击选择的时候,弹出所有的选项,用户选择一项后,下拉列表自动隐藏,很多下拉列表都是用ListView + PopupWindow来实现的,由于Google推出了
2022-06-06

Android RecyclerView 上拉加载更多及下拉刷新功能的实现方法

RecyclerView 已经出来很久了,但是在项目中之前都使用的是ListView,最近新的项目上了都大量的使用了RecycleView.尤其是瀑布流的下拉刷新,网上吧啦吧啦没有合适的自己总结了一哈。 先贴图上来看看: 使用Recyc
2022-06-06

如何在Android项目中使用RecyclerView实现上拉或下拉刷新功能

这篇文章给大家介绍如何在Android项目中使用RecyclerView实现上拉或下拉刷新功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首页布局:activity_notice
2023-05-31

Android编程实现多列显示的下拉列表框Spinner功能示例

本文实例讲述了Android编程实现多列显示的下拉列表框Spinner功能。分享给大家供大家参考,具体如下: 先上张效果图:严格来说,这并不是一个下拉列表,只不过实现的效果很像是下拉列表 实现原理: 该下拉列表其实是一个AlertDialo
2022-06-06

Android仿微信实现下拉列表

本文要实现微信6.1中点击顶部菜单栏的“+”号按钮时,会弹出一个列表框。这里用的了Activity实现,其实最好的方法可以用ActionBar,不过这货好像只支持3.0以后的版本。本文的接上文Android仿微信底部菜单栏+顶部菜单栏。
2022-06-06

Android仿美团淘宝实现多级下拉列表菜单功能

我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到有那种下拉式的二级列表菜单。具体如图所示: 上面两张图就是美团的一个二级列表菜单的一个展示。我相信很多人都想开发一个跟它一样的功能放到自己的APP中。好,接下来我们就开始
2022-06-06

Android RecyclerView实现下拉刷新和上拉加载

RecyclerView已经出来很久了,许许多多的项目都开始从ListView转战RecyclerView,那么,上拉加载和下拉刷新是一件很有必要的事情。 在ListView上,我们可以通过自己添加addHeadView和addFootVi
2022-06-06

在Android项目中使用RecyclerView实现一个上拉加载下拉刷新功能

这篇文章给大家介绍在Android项目中使用RecyclerView实现一个上拉加载下拉刷新功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。核心实现package com.example.fly.recyclervi
2023-05-31

Android使用RecyclerView实现自定义列表、点击事件以及下拉刷新

Android使用RecyclerView1. 什么是RecyclerView RecyclerView 是 Android-support-v7-21 版本中新增的一个 Widgets,官方对于它的介绍则是:RecyclerView 是
2022-06-06

怎么在Android应用中利用PopuWindow实现一个下拉列表功能

这篇文章将为大家详细讲解有关怎么在Android应用中利用PopuWindow实现一个下拉列表功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。基础依赖,由于下拉列表是用RecycleVie
2023-05-31

Android RecyclerView上拉加载更多功能回弹实现代码

实现原理是使用RecyclerView的OnTouchListener方法监听滑动 在adapter里面增加两项footview 其中date.size为显示的加载条,可以自定义,date.size+1为空白的View,我们设置其高度为0
2022-06-06

如何在Android应用中利用Spinner实现一个下拉列表功能

这期内容当中小编将会给大家带来有关如何在Android应用中利用Spinner实现一个下拉列表功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Spinner  Spinner是一个列表选择框,会在用户选
2023-05-31

Android RecyclerView实现下拉刷新和上拉加载更多

使用官方的刷新控件SwipeRefreshLayout来实现下拉刷新,当RecyclerView滑到底部实现下拉加载(进度条效果用RecyclerView加载一个布局实现) 需要完成控件的下拉监听和上拉监听,其中,下拉监听通过SwipRef
2022-06-06

Android Studio如何实现下拉列表效果

这篇文章主要讲解了“Android Studio如何实现下拉列表效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android Studio如何实现下拉列表效果”吧!题目使用 ArrayA
2023-06-30

Android中使用RecyclerView实现下拉刷新和上拉加载

推荐阅读:使用RecyclerView添加Header和Footer的方法 RecyclerView的使用之HelloWorld RecyclerView 是Android L版本中新添加的一个用
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录