viewholder

RecyclerView进阶:使用ItemTouchHelper实现拖拽和侧滑删除

时光总嘲笑我的痴心妄想 提交于 2020-03-30 07:35:29
现在RecyclerView的应用越来越广泛了,不同的应用场景需要其作出不同的改变。有时候我们可能需要实现侧滑删除的功能,比如知乎首页的侧滑删除,又或者长按Item进行拖动与其他Item进行位置的交换,但RecyclerView没有提供现成的API供我们操作,所幸SDK提供了ItemTouchHelper这样一个工具类帮助我们快速实现以上功能。不多说别的,我们来介绍一下ItemTouchHelper。 什么是ItemTouchHelper This is a utility class to add swipe to dismiss and drag & drop support to RecyclerView.It works with a RecyclerView and a Callback class, which configures what type of interactions are enabled and also receives events when user performs these actions.Depending on which functionality you support, you should override onMove(RecyclerView, ViewHolder, ViewHolder) and / or

RecyclerView拖拽排序和滑动删除实现

蓝咒 提交于 2020-03-30 07:34:58
效果图 如何实现 那么是如何实现的呢?主要就要使用到ItemTouchHelper ,ItemTouchHelper 一个帮助开发人员处理拖拽和滑动删除的实现类,它能够让你非常容易实现侧滑删除、拖拽的功能。 实现的代码非常简单我们只需要两步: 实例化一个ItemTouchHelper 关联到RecyclerView 恩,就是这么简单。 构造方法中需要一个ItemTouchHelper.Callback,ItemTouchHelper会在拖拽的时候回调Callback中相应的方法,我们只需在Callback中实现自己的逻辑就可以了。 自定义一个类继承实现ItemTouchHelper.Callback接口,需要实现以下方法: getMovementFlags用于设置是否处理拖拽事件和滑动事件,以及拖拽和滑动操作的方向,有以下两种情况: 如果是列表类型的RecyclerView,拖拽只有UP、DOWN两个方向 如果是网格类型的则有UP、DOWN、LEFT、RIGHT四个方向 该方法需要编写的代码如下: dragFlags 是拖拽标志,swipeFlags是滑动标志,我们把swipeFlags 都设置为0,暂时不考虑滑动相关操作。 如果我们设置了相关的dragFlags ,那么当我们长按item的时候就会进入拖拽并在拖拽过程中不断回调onMove()方法

Android 模版设计模式实战

百般思念 提交于 2020-03-28 19:03:10
概念 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 模版设计模式的本质便是固定算法框架。 上面的概念中有三个要点: 父类定义方法模版 子类实现方法的某一个部分 调用以父类的方式调用 优点 在开发时,只需要考虑方法的实现。不需要考虑方法在何种情况下被调用。实现代码复用。 一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。 需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制。 核心思想 代码复用,避免重复 使用 下面,让我们来介绍一个例子。假设我们需要设计一个即时聊天工具,这个工具可以显示图片、语音、文本、表情等等类型的消息。并且可以显示消息发送的状态,显示消息的时间,显示成员头像,显示成员名称。显示有哪些人读了你的消息。相信使用过 QQ 或者微信的人对这些一定都不陌生。我们暂且将这些功能称为:消息内容、消息时间、消息回执、消息状态、成员头像、成员名称。以发送端的消息显示为例,其可以长这个样子。 根据我们对 QQ 和微信的使用,可以很明显的看出,以下的部分是公有布局: 消息时间 消息回执 消息状态 成员头像 成员名称 公共操作,如点击事件

为RecyclerView打造通用Adapter

风流意气都作罢 提交于 2020-03-21 16:57:17
##RecycleView简单介绍 RecyclerView控件和ListView的原理有非常多相似的地方,都是维护少量的View来进行显示大量的数据。只是RecyclerView控件比ListView更加高级而且更加灵活。当我们的数据由于用户事件或者网络事件发生改变的时候也能非常好的进行显示。和ListView不同的是,RecyclerView不用在负责Item显示相关的功能。全部有关布局、绘制、数据绑定等都被分拆成不同的类进行管理。同一时候RecyclerView控件提供了下面两种方法来进行简化和处理大数量集合: 1.基本使用 RecycleView的基本使用 RecycleView导包(可有可无) dependencies中加入 compile'com.android.support:recyclerview-v7:23.1.1' 在布局文件里定义 <android.support.v7.widget.RecyclerView android:id="@+id/rcv_history" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> 3.对其进行初始化 rcv_history =

Android之ListView/GridView 优化

旧城冷巷雨未停 提交于 2020-03-13 15:04:20
一、效率最低的getView实现 我们知道,ListView和GridView的显示都是通过Adapter的getView实现的。 ListView/GridView数据量较小时,我们的处理方式一般是这样的(效率最低的一种方式) 1 public View getView(int position, View convertView, ViewGroup parent) { 2 View item = mInflater.inflate(R.layout.list_item_icon_text, null); 3 ((TextView) item.findViewById(R.id.text)).setText(DATA[position]); 4 ((ImageView) item.findViewById(R.id.icon)).setImageBitmap( 5 (position & 1) == 1 ? mIcon1 : mIcon2); 6 return item; 7 } 当数据量非常大时,这样每一次getView都会去inflate布局,效率太差,这会让我们的程序卡顿,滑动多了还会OOM。 二、利用Android已经提供了View缓存机制实现ViewHolder模式——实现View共享 我们注意到getView的第二个参数convertView

Android学习笔记- ButterKnife 8.0注解使用介绍

爷,独闯天下 提交于 2020-03-06 19:08:26
前言: App项目开发大部分时候还是以UI页面为主,这时我们需要调用大量的findViewById以及setOnClickListener等代码,控件的少的时候我们还能接受,控件多起来有时候就会有一种想砸键盘的冲动。所以这个时候我们想着可以借助注解的方式让我们从这种繁重的工作中脱离出来,也让代码变得更加简洁,便于维护,今天主要学习一下只专注View、Resource、Action注解框架ButterKnife。 ButterKnife介绍 ButterKnife是一个专注于Android系统的View、Resource、Action注入框架。 官网:http://jakewharton.github.io/butterknife/ gitHub:https://github.com/JakeWharton/butterknife/ ButterKnife使用前后对比: 看看没有使用View注解之前我们是如何做的 1.)使用之前 public class ExampleActivity extends AppCompatActivity { private final static String TAG = ExampleActivity.class.getSimpleName(); String butterKnifeStr; Drawable

灭霸-个人冲刺第九天

无人久伴 提交于 2020-03-05 13:35:05
1, 昨天的成就:   a) 完成的任务:失物招领页面完善,框架接近完美   b) 所花时间:6h   c) 还剩余2h 2, 遇到的困难: a) 算法整理很困难,初步认为先用标签,更改了表结构,让表结构接近完美,可以充分通过表信息,进行对每一个用户进行建表,以此,充分得知用户的喜好,再根据这些喜好,进行推荐。 3, 今天的任务: a) 转战表白墙设计 1 package com.weicent.android.csma.adapter; 2 3 import android.content.Context; 4 import android.util.SparseArray; 5 import android.view.View; 6 import android.view.ViewGroup; 7 import android.widget.BaseAdapter; 8 9 import java.util.ArrayList; 10 import java.util.List; 11 12 13 /** 14 * 泛型数据适配器 15 */ 16 public abstract class SimpleBaseAdapter<T> extends BaseAdapter { 17 protected Context context; 18 protected List<T>

安卓专业高级一Day11

丶灬走出姿态 提交于 2020-03-04 22:11:46
ContentProvider 制作一个图片浏览器 布局 代码 布局 < ? xml version = "1.0" encoding = "utf-8" ? > < LinearLayout xmlns : android = "http://schemas.android.com/apk/res/android" xmlns : app = "http://schemas.android.com/apk/res-auto" xmlns : tools = "http://schemas.android.com/tools" android : layout_width = "match_parent" android : layout_height = "match_parent" android : orientation = "vertical" tools : context = ".Main2Activity" > < Button android : id = "@+id/button1" android : layout_width = "wrap_content" android : layout_height = "wrap_content" android : text = "查看所有图片" / > < GridView android : id = "@

ListView展示SIM信息

大兔子大兔子 提交于 2020-03-01 21:22:30
首先看一下程序运行后的图片: 在开始写代码之前,看展示下程序的结构: 下面开始代码, 第一步,主程序代码: import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.telephony.TelephonyManager; import android.widget.ListView; public class GetSIMinfo extends Activity { /** * android API中的TelephonyManager对象,可以取得SIM卡中的信息 */ private TelephonyManager telMgr; /** * 取得名称和数值的泛型数组 */ private List<String> item=new ArrayList<String>(); private List<String> value=new ArrayList<String>(); private ListView listview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate

listview加载性能优化ViewHolder

孤者浪人 提交于 2020-03-01 21:21:14
在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。 ListView加载数据都是在public View getView(int position, View convertView, ViewGroup parent) {}方法中进行的(要自定义listview都需要重写listadapter: 如BaseAdapter,SimpleAdapter,CursorAdapter的等的getvView方法),优化listview的加载速度就要让convertView匹配列表类型,并最大程度上的重新使用convertView。 getview的加载方法一般有以下三种种方式: 最慢的加载方式是每一次都重新定义一个View载入布局,再加载数据 public View getView(int position, View convertView, ViewGroup parent) { View item = mInflater.inflate(R.layout.list_item_icon_text, null); ((TextView) item