精华内容
下载资源
问答
  • Android ListView填充数据的方法 因为多人开发,为了是自己开发的模块方便融合到主框架中,同时也为了减小apk的大小,要求尽可能少的使用xml的布局文件,开发中需要在ListView中显示数据,网上查到的几乎所有的示例...
  • 使用BaseAdapter比较简单,主要是通过继承此类来实现BaseAdapter四个方法: public int getCount(): 适配器中数据的数据个数; public Object getItem(int position): 获取数据集中与索引对应的数据项; public ...

    BaseAdapter

    使用BaseAdapter比较简单,主要是通过继承此类来实现BaseAdapter的四个方法:

    public int getCount(): 适配器中数据集的数据个数;

    public Object getItem(int position): 获取数据集中与索引对应的数据项;

    public long getItemId(int position): 获取指定行对应的ID;

    public View getView(int position,View convertView,ViewGroup parent): 获取没一行Item的显示内容。

    1.创建布局文件baseadapter.xml

    <?xml version="1.0" encoding="utf-8"?>

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_weight="1.12" >
    
    </ListView>
    
    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    
    <TextView
        android:id="@+id/says"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    
    <ImageView
        android:id="@+id/imgtou"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
    

    2.Animal.java

    public class Animal {
    private String aName;
    private String aSpeak;
    private int aIcon;

    public Animal() {
    }
    
    public Animal(String aName, String aSpeak, int aIcon) {
        this.aName = aName;
        this.aSpeak = aSpeak;
        this.aIcon = aIcon;
    }
    ......get、set方法
    

    3.AnimalAdapter.java
    package com.example.baseadapter;

    import java.util.LinkedList;

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;

    public class AnimalAdapter extends BaseAdapter {

    	    private LinkedList<Animal> mData;
    	    private Context mContext;
    
    	    public AnimalAdapter(LinkedList<Animal> mData, Context mContext) {
    	        this.mData = mData;
    	        this.mContext = mContext;
    	    }
    
    	    @Override
    	    public int getCount() {
    	        return mData.size();
    	    }
    	    @Override
    	    public Object getItem(int position) {
    	        return null;
    	    }
    	    @Override
    	    public long getItemId(int position) {
    	        return position;
    	    }
    	    @Override
    	    public View getView(int position, View convertView, ViewGroup parent) {
    	    
    	    //通过LayoutInflater的from方法,可以将布局文件转换成一个View对象convertView
    	    	convertView = LayoutInflater.from(mContext).inflate(R.layout.baseadapter,parent,false);
    	    	//将convertView中的布局的id转换成Java中的对象。
    	        ImageView img_icon = (ImageView) convertView.findViewById(R.id.imgtou);
    	        TextView txt_aName = (TextView) convertView.findViewById(R.id.name);
    	        TextView txt_aSpeak = (TextView) convertView.findViewById(R.id.says);
    	        //通过各种set方法修改对象的属性
    	        img_icon.setBackgroundResource(mData.get(position).getaIcon());
    	        txt_aName.setText(mData.get(position).getaName());
    	        txt_aSpeak.setText(mData.get(position).getaSpeak());
    	        return convertView;
    	        
    	    }
    

    }
    4.package com.example.baseadapter;

    import java.util.LinkedList;
    import java.util.List;

    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Context;

    import android.widget.ListView;

    public class MainActivity extends Activity {

    private List<Animal> mData = null;
    

    private Context mContext;
    private AnimalAdapter mAdapter = null;
    private ListView list_animal;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.baseadapter);

        mContext = MainActivity.this;
        list_animal = (ListView) findViewById(R.id.listView1);
        mData = new LinkedList<Animal>();
        mData.add(new Animal("鲁迅", "《呐喊》", R.drawable.ic_launcher));
        mData.add(new Animal("朱自清", "《春》", R.drawable.ic_launcher));
        mData.add(new Animal("徐志摩", "《再别康桥》", R.drawable.ic_launcher));
        mData.add(new Animal("老舍", "骆驼祥子", R.drawable.ic_launcher));
        mData.add(new Animal("巴金", "家", R.drawable.ic_launcher));
        mAdapter = new AnimalAdapter((LinkedList<Animal>) mData, mContext);
        list_animal.setAdapter(mAdapter);
    }
    

    }

    5.,AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.baseadapter.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190408095747358.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE3NDUzNg==,size_16,color_FFFFFF,t_70)
    展开全文
  • 编程思想:(1).用假数据填充当前页面的listView (2).用addFooterView方法,为listview加入一个ProgressBar用于显示数据异步加载 ...这里使用发消息handler加载数据,是为了减少主线程负重,把数据的加载都运行在工作线程.

    编程思想:

    (1).用假数据填充当前页面的listView
    (2).用addFooterView方法,为listview加入一个ProgressBar用于显示数据异步加载
    (3).重写onScroll方法,找出listview最后的位置
    (4).重写onScrollStateChanged方法,处理数据.这里使用发消息给handler加载数据,是为了减少主线程负重,把数据的加载都运行在工作线程.
    

    效果图:

    这里写图片描述

    代码实现:

    private ListView listView;
        private View moreView; //加载更多页面
    
        private SimpleAdapter adapter;
        private ArrayList<HashMap<String, String>> listData;
    
        private int lastItem;
        private int count;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            listView = (ListView)findViewById(R.id.listView);
            moreView = getLayoutInflater().inflate(R.layout.load, null);
            listData = new ArrayList<HashMap<String,String>>();
    
            prepareData(); //准备数据
            count = listData.size();
    
            adapter = new SimpleAdapter(this, listData,R.layout.item, 
                    new String[]{"itemText"}, new int[]{R.id.itemText});
    
            listView.addFooterView(moreView); //添加底部view,一定要在setAdapter之前添加,否则会报错。
    
            listView.setAdapter(adapter); //设置adapter
            listView.setOnScrollListener(this); //设置listview的滚动事件
        }
    
        private void prepareData(){  //准备数据
            for(int i=0;i<10;i++){
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("itemText", "测试数据"+i);
                listData.add(map);
            }
        }
    
        private void loadMoreData(){ //加载更多数据
             count = adapter.getCount(); 
            for(int i=count;i<count+5;i++){
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("itemText", "测试数据"+i);
                listData.add(map);
            }
            count = listData.size();
        }
    
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            //减1是因为上面加了个addFooterView
            lastItem = firstVisibleItem + visibleItemCount - 1;  
    
        }
    
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) { 
            Log.i(TAG, "scrollState="+scrollState);
            //下拉到空闲是,且最后一个item的数等于数据的总数时,进行更新
            if(lastItem == count  && scrollState == this.SCROLL_STATE_IDLE){ 
                Log.i(TAG, "拉到最底部");
                moreView.setVisibility(view.VISIBLE);
    
                mHandler.sendEmptyMessage(0);
    
            }
    
        }
        //声明Handler
        private Handler mHandler = new Handler(){
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                case 0:
    
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    loadMoreData();  //加载更多数据,这里可以使用异步加载
                    adapter.notifyDataSetChanged();
                    moreView.setVisibility(View.GONE); 
    
                    if(count > 30){
                        Toast.makeText(MainActivity.this, "木有更多数据!", 3000).show();
                        listView.removeFooterView(moreView); //移除底部视图
                    }
                    Log.i(TAG, "加载更多数据");
                    break;
    
                }
            };
        };
    展开全文
  • 总结步骤:总结:1....利用少拿多取获得加载快速.1/因为listview加载控价都是一样,所以可以重复使用(方法中,已经了convertView) 操作:1/判断是否曾经使用过加载控件, 2/如果没有,就去使用打气筒进行填充

    总结步骤:

    总结:1.复用已经加载的控件

    总结2:将listview中的控件的控件与控件进行绑定,重复利用.

    总结3:listview需要的数据较多时,将listview需要的数据分批次给予.利用少拿多取获得加载的快速.

    1/因为listview加载的控价都是一样的,所以可以重复使用(方法中,已经给了convertView)
    操作:1/判断是否曾经使用过加载的控件,
    2/如果没有,就去使用打气筒进行填充一个.
    3/如果有,就去重复使用历史控件

    2.1/因为控件中,还有控件,是否可以与加载的控件一样重复使用?
    view控件中有SetTag(int key, Object tag)和 getTag(int key)两个方法,可以将控件直接绑定.所以可以重复使用view中的子控件(view)
    (当绑定的控件较少的时候,可以使用此方法,与view进行绑定)

    2.2/又因为view中有SetTag(Object tag)和getTag()两个方法,可以与view绑定,所以可以重复使用view中的子控件(view)
    因为这两个方法可以绑定与获得对象,所以把控件中的控件同时保存在javabean中,直接绑定.
    (这个方法可以使用在,控件中的子控件,所有的都需要绑定的时候使用) 一般讲javabean定义为viewholder,译为控件持有者

    3.1/当listview中显示的条目较多的时候,也会导致listview加载变慢,怎么办?
    将给listview的数据分批次给与,(也就是减少取数据的数量,,同样的,也就是增加了取数据的次数)
    (也就是少拿多取,少拿表示数量上少,多取表示多次取)

    3.2同时因为分批次给数据,怎样才能当前一批数据显示完毕的时候,再取下一批数据呢?
    因为数据较多的时候,会有滚动,所以给listview设置一个滚动的监听,判断滚动的状态和显示的listview的最后一个状态.

    展开全文
  • 之前用数据读取器将数据填充ListView中 代码如下 listView1.Items.Clear(); SqlConnection con = new SqlConnection("server=.;UID=sa;PWD=1234;database=XXXX"); con.Open(); SqlCommand cmd = new ...
  • 在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列...一般我们都会给listview set一个adapter ,然后adapter里面初始化的方法就是 getview

    在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。

    一般我们都会给listview set一个adapter ,然后adapter里面初始化的方法就是 getview(),这个方法 简单说是这个意思,就是 你的listview有多少行,或者说count值是多少,他就会走多少次getview().所以 优化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.findViewById(R.id.text)).setText(DATA[position]);
     ((ImageView) item.findViewById(R.id.icon)).setImageBitmap(
     (position & 1) == 1 ? mIcon1 : mIcon2);
     return item;
    }


     

    正确的加载方式是当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据

    public View getView(int position, View convertView, ViewGroup parent) {
     if (convertView == null) {
     convertView = mInflater.inflate(R.layout.item, parent, false);
     }
     ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]);
     ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap(
     (position & 1) == 1 ? mIcon1 : mIcon2);
     return convertView;
     }


     

    最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可

    public class ViewHolder {
    TextView txt;
    ImageView icon;
    }
     
    public View getView(int position, View convertView, ViewGroup parent) {
     ViewHolder holder;
     
     if (convertView == null) {
     convertView = mInflater.inflate(R.layout.list_item_icon_text,
     parent, false);
     holder = new ViewHolder();
     holder.txt= (TextView) convertView.findViewById(R.id.text);
     holder.icon = (ImageView) convertView.findViewById(R.id.icon);
     convertView.setTag(holder);
    } else {
    holder = (ViewHolder) convertView.getTag();
    }
    holder.text.setText(DATA[position]);
    holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
    return convertView;
    }


    展开全文
  • Listview分页

    2009-11-23 13:15:00
    DataAdapter对象通过重载Fill方法提供了返回当前页面数据的功能。然而,这种方法对大数据量的查询结果并不是最好的选择,这是因为:当DataAdapter用请求的结果填充DataTable或者DataSet时,数据库返回的资源仍是全部...
  • 现在很多人再给ListView的时候使用BaseAdapter来填充 在getView方法中 使用ViewHolder来优化 这中方法的确很达到优化效果但仅仅是百分之70到80   很多人忽略了SimpleAdapter或者SimpleCursorAdapter(数据源在...
  • android获取webservice接口的数据

    千次阅读 2015-08-09 16:13:09
    前言 其实我不怎么会这个,我是边看源码边做翻译,突然... 1、首先是给listview填充数据,那么就得发送网络请求对吧,看下面:2.我们点击cgquery方法到接口实现类去,如下:3.我们先看BeanGeneralInquiries这个
  • 先来看ListView类中makeAndAddView方法: 没有数据变化:从mRecycler中取得可视view 数据有变化:obtainView 1 /** 2 * 获取视图填充到列表item中去,视图可以是从未使用过视图转换过来,也可以是从...
  • 2014年12月28日

    2015-01-07 16:22:07
    给listview填充数据时,为了提高效率,通常会使用holder来封装控件及其数据。使用方法如下:  public View getView(int position, View convertView, ViewGroup parent) {  View view = null;  if (convertV
  • adapter是一个控制器对象,负责从模型层获取数据,创建并填充必要视图对象,将准备好视图对象返回给ListView; 首先,通过调用adaptergetCount()方法,ListView询问数组列表中包含多少个对象(为避免出现数组...
  • 关于适配器解释,简单讲就是把要显示用户的数据信息通过适当模式动态的填充各种ListView,也可以看作是界面数据绑定一种理解,它所操纵的数据一般都是一些比较复杂的数据,界面是有一定规律Vi...
  • 对BaseAdapter进行封装

    2016-08-17 12:58:36
    要想使用ListView展现数据,必须执行ListViewsetAdapter方法,将数据填充给ListView。相信大家对Adapter写法并不陌生,以下为常用写法:class MyAdapter extends BaseAdapter { @Override
  • flutter学习记录第二天

    2020-06-11 23:01:02
    3.flutter的listview有三种方式,一种静态数据很简单,两种动态数据,build大数据全加载,spe方便添加分割线和数据填充, 4,flutter资源文件配置,需要空格一个都不能错。完全手打对了才行。 5,flutter...
  • 黑马安卓52期视频教程

    热门讨论 2015-06-24 22:15:48
    1.下拉刷新(填充数据和隐藏headerView) 2.下拉刷新(在TouchMove中显示headerView) 3.下拉刷新(处理3种状态切换) 4.下拉刷新(完成下拉刷新并更新UI) 5.下拉刷新(加载更多) 6.侧滑菜单(布局子view) 7.侧滑菜单(使用...
  • //填充数据 m_List.InsertColumn(0, "QQ", LVCFMT_LEFT, 100); m_List.InsertColumn(1, "昵称", LVCFMT_LEFT, 100); m_List.InsertItem(0, "5854165"); m_List.SetItemText(0, 1, "白乔"); m_List....
  • 定义 数组是一种排列有序的数据结构,包含于数组中变量被称为数组元素, 它们都有相同类型。 数组声明 int [] array1 = new int[5]; int [,,] array3 = new int[10,20,30]; int [] array1 = new int[] {1,2,4}...
  • DataAdapter:数据的集合,用语填充。 19.ASP.net的身份验证方式有哪些?分别是什么原理? 答:10。Windwos(默认)用IIS...From(窗体)用帐户....Passport(密钥) 20.什么是Code-Behind技术? 答:代码后植。 21.在...
  • asp.net知识库

    2015-06-18 08:45:45
    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...
  • 9.6.1 执行委托调用的方法 9.6.2 对Array类使用泛型委托 9.7 Framework的其他泛型类型 9.7.1 结构Nullable 9.7.2 EventHandler 9.7.3 ArraySegment 9.8 小结 第10章 集合 10.1 集合接口和类型 10.2 列表 10.2.1 创建...
  • ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域鸿篇巨制,全面讲解了ASP.NET4各种特性及其背后工作原理,并出了许多针对如何构建复杂、可扩展网站从实践中得出...
  • 实例111 使用重载方法实现不同类型数据的计算 5.2 结构与类 实例112 通过结构计算矩形的面积 实例113 通过类继承计算梯形面积 实例114 封装类实现一个简单的计算器 实例115 使用面向对象思想查找字符串中的...
  • 实例111 使用重载方法实现不同类型数据的计算 5.2 结构与类 实例112 通过结构计算矩形的面积 实例113 通过类继承计算梯形面积 实例114 封装类实现一个简单的计算器 实例115 使用面向对象思想查找字符串中的...
  • 实例111 使用重载方法实现不同类型数据的计算 5.2 结构与类 实例112 通过结构计算矩形的面积 实例113 通过类继承计算梯形面积 实例114 封装类实现一个简单的计算器 实例115 使用面向对象思想查找字符串中的...
  • 实例146 数据统计方法的封装(用户登录功能设计) 实例147 SqlParameter参数方式操作数据库(存储过程) 5.5 以备后患:数据库备份与恢复 实例148 数据库备份操作 实例149 数据库还原操作 实例150 ...
  •  实例111 使用重载方法实现不同类型数据的计算 135 5.2 结构与类 136  实例112 通过结构计算矩形的面积 136  实例113 通过类继承计算梯形面积 137  实例114 封装类实现一个简单的计算器 139  实例115 使用...
  • 实例111 使用重载方法实现不同类型数据的计算 135 5.2 结构与类 136 实例112 通过结构计算矩形的面积 136 实例113 通过类继承计算梯形面积 137 实例114 封装类实现一个简单的计算器 139 实例115 使用面向对象思想...
  • C#高级编程(第6版)

    2011-05-11 11:10:30
     9.6.1 执行委托调用的方法  9.6.2 对Array类使用泛型委托  9.7 Framework的其他泛型类型  9.7.1 结构Nullable  9.7.2 EventHandler  9.7.3 ArraySegment  9.8 小结  第10章 集合  10.1 集合接口和类型  ...
  • Android 开发技巧

    热门讨论 2012-03-26 10:24:42
    4.6.5、ListView 被选中item背景颜色 82 4.6.6、ListView自定义背景颜色 83 4.6.7、List长按与短按消息映射 84 4.6.8、点击ListView改变背景色 87 4.6.9、自动滚动ListView 88 4.6.10、BaseExpandableListAdapter...

空空如也

空空如也

1 2 3
收藏数 58
精华内容 23
关键字:

给listview填充数据的方法