首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Android 开发者

    RecyclerView | 在 RecyclerView 中使用 ListAdapter

    ListAdapter 可以处理元素的添加和删除而无需重绘视图,甚至可以为变化添加动画效果。 使用 ListAdapter 的另一个好处是: 当添加或删除元素的时候,还可以添加动画。 添加元素的动画效果 处理差异比较 DiffUtil 是 ListAdapter 能够高效改变元素的奥秘所在。 也就是说您无需再重写 getItemCount(),因为 ListAdapter 会负责管理列表。 仅需几步简单操作就可以在您的 RecyclerView 中使用 ListAdapter。现在您的应用可以通过使用 ListAdapter 来更新那些发生变化的元素以获得更好的性能和用户体验了。 如果您想了解更多关于 ListAdapter 的内容,请参考 官方文档。

    2K20编辑于 2022-03-09
  • 来自专栏向治洪

    解决ListView嵌套ListView遇到的问题

    private void setListViewHeightBasedOnChildren(ListView listView) { if(listView == null) return; ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount

    2.3K60发布于 2018-01-29
  • 来自专栏向治洪

    仿火车出票效果

    4)如何去计算LISTVIEW的总高度 解决:本DEMO采用了2种方式, 第一种:鉴于订单中每个ITEM的布局都是固定的,于是在布局中设置ITEM的高度为固定值,之后乘以listAdapter.getCount totalHeight = 0;   public static void setListViewHeightBasedOnChildren(ListView listView) {       ListAdapter  listAdapter = listView.getAdapter();   if (listAdapter == null) {   return;       }       totalHeight  = 0;   // 由于ADD了个footer,所以总量减去1     Log.d("listAdapter.getCount()", "" + listAdapter.getCount());   for (int i = 0, len = listAdapter.getCount() - 1; i < len; i++) {           View listItem = listAdapter.getView

    1.1K80发布于 2018-01-29
  • 来自专栏LearnPath

    策略模式及Android源码中的应用

    策略模式和工厂模式的区别 工厂模式 策略模式 创建型的设计模式 行为型的设计模式 关注对象创建 关注行为的选择 黑盒子(无需知道具体的实现过程) 白盒子(知道具体的实现过程) 源码中的策略模式实现 ListAdapter 仍然调用的是 ListView.setAdapter(…) 方法,传入的是ArrayAdapter或BaseAdapter等,查看 ListView 源码,发现 setAdapter 方法的参数是一个 ListAdapter ,如下: @Override public void setAdapter(ListAdapter adapter) { ........ } public interface ListAdapter extends Adapter{ ......... } 可以看到 ListAdapter 是一个接口,ArrayAdapter 和 BaseAdapter 是它的一个实现类 可以发现 ListAdapter 就是 strategy 接口,ArrayAdpater 等就是具体的实现类,而在 ListView 中引用的是 接口 ListAdapter,可以证实这就是一个 策略模式

    54020编辑于 2022-09-08
  • 来自专栏LeoXu的博客

    动态设置ListView的高度 原

    -- lang: java --> //动态设置listView的高度 ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount

    2.5K40发布于 2018-08-15
  • 来自专栏拭心的安卓进阶之路

    ScrollView+ListView滚动冲突,没有滑动效果 解决办法

    * 算出listview的高度 */ public static void setListViewHeight(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(1, 1); = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount

    1.6K10编辑于 2022-11-30
  • 来自专栏Android开发经验

    常用的代码片段,不断更新

    public static void setListViewHeightBasedOnChildren(ListView listView) { // 获取ListView对应的Adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount

    74920发布于 2018-06-28
  • 来自专栏风吹杨柳

    解决把listview放在ScrollView只显示一行的问题

    listView) { // TODO Auto-generated method stub // 获取ListView对应的Adapter WzCommentAdapter listAdapter = (WzCommentAdapter) listView.getAdapter(); if (listAdapter == null) { return ; } int totalHeight = 0; for (int i = 0, len = listAdapter.getCount (); i < len; i++) { // listAdapter.getCount()返回数据项的数目 View listItem = listAdapter.getView listView.getLayoutParams(); params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount

    1.4K30发布于 2019-07-08
  • 来自专栏张志敏的技术专栏

    Mono for Android 下的 ListActivity

    ListView 的数据源, 代码如下: protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // 设置 ListAdapter 为 ArrayAdapter<string> this.ListAdapter = new ArrayAdapter<string>(this, Resource.Layout.MyListActivityItemLayout 方法中这样初始化 ArrayAdapter : var countries = Resources.GetStringArray(Resource.Array.CountryArray); this.ListAdapter // 获取资源中定义的字符串数组 var countries = Resources.GetStringArray(Resource.Array.CountryArray); this.ListAdapter 在很多情况下, 还需要使用自定义的 ListAdapter , Mono for Android 版本的自定义 BaseAdapter 实现如下: public class MyListAdapter

    70950发布于 2020-08-10
  • 来自专栏iOS开发干货分享

    抛弃UITableView,让所有列表页不再难构建

    listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController { return ListSectionController() } ///数据为空时显示的占位视图 func emptyView(for listAdapter: ListAdapter) (_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController { let Feed } } 在ViewController里重新实现一下数据源方法就行了 override func listAdapter(_ listAdapter: ListAdapter, override func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController

    2.2K30发布于 2019-06-14
  • 来自专栏向治洪

    android scrollview嵌套listview计算高度的问题

    setListViewHeightBasedOnChildren(ListView listView) {              // 获取ListView对应的Adapter              ListAdapter  listAdapter = listView.getAdapter();              if (listAdapter == null) {                  return ;              }              int totalHeight = 0;              for (int i = 0, len = listAdapter.getCount (); i < len; i++) {                  // listAdapter.getCount()返回数据项的数目                  View listItem  = listAdapter.getView(i, null, listView);                  // 计算子项View 的宽高                  listItem.measure

    2.9K60发布于 2018-01-30
  • 来自专栏拭心的安卓进阶之路

    Android 中的那些策略模式

    策略模式例子 1 : ListAdapter 在 RecyclerView 还没火起来前,ListView 是一个很重要的组件,我们通常在布局里写个 ListView 组件,然后在代码中 setAdapter : 我们可以看到,当更换 Adapter 的具体实现时,仍然调用的是 ListView.setAdapter(…) 方法,查看 ListView 源码,发现 setAdapter 方法的参数是一个 ListAdapter : 继续看 ListAdapter 源码和类结构: 可以看到 ListAdapter 是一个接口,ArrayAdapter 和 BaseAdapter 是它的一个实现类。 对比文章开始给出的 策略模式 UML 图,可以发现 ListAdapter 就是 strategy 接口,ArrayAdpater 等就是具体的实现类,而在 ListView 中引用的是 接口 ListAdapter setAdapter 一样,ValueAnimator 的 setInterpolator 方法中也引用的是 接口 TimeInterpolator: TimeInterpolator 源码及类结构: 跟 ListAdapter

    75840编辑于 2022-05-10
  • 来自专栏Android干货

    安卓开发ScrollView嵌套ListView只显示一行

    android.widget.AdapterView.OnItemClickListener; 17 import android.widget.ArrayAdapter; 18 import android.widget.ListAdapter listAdapter = listView.getAdapter(); 99 if (listAdapter == null) { 100 102 103 int totalHeight = 0; 104 for (int i = 0, len = listAdapter.getCount (); i < len; i++) { 105 // listAdapter.getCount()返回数据项的数目 106 View listItem = listAdapter.getView(i, null, listView); 107 // 计算子项View 的宽高

    1.7K90发布于 2018-05-18
  • 来自专栏全栈程序员必看

    android中适配器的作用,适配器模式 在Android中的简单理解「建议收藏」

    ListView中想用一个getView()方法,但是不同的数据,不同的需求,会有不同的getView()结果,所以getView()不能写死了,那么可能就想到了用适配器模式 所以ListView里面包含了一个ListAdapter 的成员变量,实际上是ListView继承了AbsListView,ListAdapter变量是在AbsListView中声明的 然后BaseAdapter是实现了ListAdapter的,那么我们自定义的 ***Adapter继承了BaseAdapter,其实也就相当于间接实现了ListAdapter,并且***Adapter会具体去实现getView()方法 那么ListView就可以通过调用setAdapter (ListAdapter adapter)方法,将***Adapter传进去,从而实现了我们想要的结果 Java 适配器模式有两种: 类适配器 对象适配器 场景: 假如A类想用M方法,X类有M方法,但是

    1.1K20编辑于 2022-09-03
  • 来自专栏须臾之余

    深入MyBatis源码,理解Java设计模式之适配器模式

    get(int index); E set(int index, E element); } 3.适配器(Adapter):连接目标和源的中间对象,相当于插头转换器 public class ListAdapter extends HashMap { private List list; public ListAdapter(List list) { this.list = list member = new MemberService().getMember(); //new OrderService().froOrderMap(member); ListAdapter listAdapter = new ListAdapter(member); new OrderService().froOrderMap(listAdapter); } }

    82731发布于 2019-07-05
  • 来自专栏Keegan小钢

    Android项目重构之路:实现篇(三)

    SwipeRefreshLayout swipeRefreshLayout; private ListView listView; private CouponListAdapter listAdapter = new CouponListAdapter(this); listView.setAdapter(listAdapter); } private void data.isEmpty()) { if (currentPage == 1) { // 第一页 listAdapter.setItems (data); } else { // 分页数据 listAdapter.addItems(data); Override public void onRefresh() { // 需要重置当前页为第一页,并且清掉数据 currentPage = 1; listAdapter.clearItems

    57120发布于 2018-08-10
  • 来自专栏向治洪

    解决水平ListView在ScrollView中出现的滑动冲突

    android.view.MotionEvent;   import android.view.View;   import android.widget.AdapterView;   import android.widget.ListAdapter android.widget.Scroller;   /**  * 重写ListView,以达到水平滑动  */ public class HorizontalListView extends AdapterView<ListAdapter >   {   public boolean mAlwaysOverrideTouch = true;   protected ListAdapter mAdapter;   private             invalidate();               requestLayout();           }       };   @Override public ListAdapter        {   // TODO: implement return null;       }   @Override public void setAdapter(ListAdapter

    1.9K90发布于 2018-02-01
  • 来自专栏项勇

    笔记15 | 归纳总结Android动态设置TextView的颜色的四种方法

    contacts/people"), null, null, null, null); startManagingCursor(cursor); ListAdapter listAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item new int[] { android.R.id.text1, android.R.id.text2 }); listView.setAdapter(listAdapter

    1.6K40发布于 2018-06-19
  • 来自专栏向治洪

    Android实现仿支付宝流水

    mFooterView = new ListViewFooter(context); } @Override public void setAdapter(ListAdapter } int findFirstVisibleSectionPosition(int firstVisibleItem, int visibleItemCount) { ListAdapter } return -1; } int findCurrentSectionPosition(int fromPosition) { ListAdapter return -1; } void recreatePinnedShadow() { destroyPinnedShadow(); ListAdapter ; } ListAdapter oldAdapter = getAdapter(); if (oldAdapter !

    1.4K80发布于 2018-02-06
  • 来自专栏Java冰冻三尺

    适配器模式在Mybatis中的妙用

    适配器(Adapter):连接目标和源的中间对象,相当于插头转换器** ``` public class ListAdapter extends HashMap { private List list; public ListAdapter(List list) { this.list = list; } @Override public int main(String[] args) { List member = new MemberService().getMember(); ListAdapter listAdapter = new ListAdapter(member); new OrderService().froOrderMap(listAdapter); } }

    89720发布于 2021-03-23
领券