热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

工具类/基础优化形ListView

创建类继承自arrayAdapter类->重写父类方法->建立自定义ViewHolder->将数据类中的数据实例化->用ViewHolder存储于View中->

创建类继承自arrayAdapter类->重写父类方法->建立自定义ViewHolder->将数据类中的数据实例化->用ViewHolder存储于View中->setTag()设置数据

使用ViewHolder模式提高效率

    ViewHolder利用listView的试图缓存机制,每次getView(),通过findViewById()实例化控件。

    当数量较多,频繁动态增减时使用arrayadapter,通过setNotifyOnChange,降低view的处理量。

convertView:用于将之前加载好的布局进行缓存,以便以后可以进行重用。

resourceId=textViewResourceId->ListView子项布局id


if (cOnvertView==null){
    view=LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
    viewHolder=new ViewHolder();
    viewHolder.imageView= (ImageView) view.findViewById(R.id.imageView);
    viewHolder.textView= (TextView) view.findViewById(R.id.textView);

如果convertView为null,使用LayoutInflater加载布局

 view=LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
代码:
package com.example.yrc.listviewptest;

import android.content.Context;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**  * Created by YRC on 2017/5/29.  */  public class ViewHolderAdapter extends ArrayAdapter {
    private int resourceId;


    public ViewHolderAdapter(Context context,int textViewResourceId,List objects) {
        super(context, textViewResourceId, objects);
        resourceId=textViewResourceId;
    }

    @NonNull
    @Override
    public View getView(int position,  View convertView,  ViewGroup parent) {
        Form form=getItem(position);
        View view;
        ViewHolder viewHolder;
        if (cOnvertView==null){
            view=LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
            viewHolder=new ViewHolder();
            viewHolder.imageView= (ImageView) view.findViewById(R.id.imageView);
            viewHolder.textView= (TextView) view.findViewById(R.id.textView);
            view.setTag(viewHolder);
        }else {
            view=convertView;
            viewHolder= (ViewHolder) view.getTag();
        }
        viewHolder.imageView.setImageResource(form.getImageId());
        viewHolder.textView.setText(String.valueOf(form.getNumber()));
        return view;
    }

    class ViewHolder{
        ImageView imageView;
        TextView textView;
    }
}
MainActivity
    
public class MainActivity extends AppCompatActivity {
    private List formList=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initForm();
        final ViewHolderAdapter adapter=new ViewHolderAdapter(MainActivity.this,
                                                        R.layout.viewholder_item,formList);
        Button button= (Button) findViewById(R.id.b1);
        final ListView listView= (ListView) findViewById(R.id.ListView);
        listView.setAdapter(adapter);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Form form18=new Form(9,R.mipmap.ic_launcher);
                formList.add(form18);
                adapter.notifyDataSetChanged();
                listView.setSelection(formList.size()-1);
            }
        });
        for (int i=0;iprivate void initForm() {
        Form form1=new Form(1,R.mipmap.ic_launcher);
        formList.add(form1);
        Form form2=new Form(2,R.mipmap.ic_launcher);
        formList.add(form2);
        Form form3=new Form(3,R.mipmap.ic_launcher);
        formList.add(form3);
        Form form4=new Form(4,R.mipmap.ic_launcher);
        formList.add(form4);
        Form form5=new Form(5,R.mipmap.ic_launcher);
        formList.add(form5);
        Form form6=new Form(6,R.mipmap.ic_launcher);
        formList.add(form6);
        Form form7=new Form(7,R.mipmap.ic_launcher);
        formList.add(form7);
    }
}

写在最后 

设置分隔线:android:divider=“@android:color:”

                                        divider

                                        divider="@null"  透明

隐藏滚动条:android:scrollbars="none"

设置ListView显示在第几项 listView.setSelection(N)    

                                          listView.smoothScrollBy()

                                          listView.smoothScrollByOffset

                                          listView.smoothScrollToPosition

取消Item点击效果:android:listSelector="#00000000"

动态修改ListView :修改传递给Adapter映射的List    add()

                              调用notifyDataSetChanged()进行动态修改

遍历ListView所有的子成员: 

for (int i=0;i 
 
处理空ListView :Listview.setEmptyView
 
 


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
author-avatar
夫妇郭_390
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有