-
Android ListView填充数据的方法
2021-01-20 10:06:27Android ListView填充数据的方法 因为多人开发,为了是自己开发的模块方便融合到主框架中,同时也为了减小apk的大小,要求尽可能少的使用xml的布局文件,开发中需要在ListView中显示数据,网上查到的几乎所有的示例... -
BaseAdapter给LIstview填充数据
2019-04-08 09:58:09使用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>
-
ListView上拉刷新,数据的分批加载小demo
2016-05-31 20:43:52编程思想:(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; } }; };
-
优化ListView的总结步骤
2016-12-28 15:34:37总结步骤:总结: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的最后一个状态. -
C#ListView绑定DataSet的的问题
2015-05-21 08:30:19之前用数据读取器将数据填充到ListView中 代码如下 listView1.Items.Clear(); SqlConnection con = new SqlConnection("server=.;UID=sa;PWD=1234;database=XXXX"); con.Open(); SqlCommand cmd = new ... -
listview加载性能优化之view的复用
2015-03-26 17:51:05在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:00DataAdapter对象通过重载Fill方法提供了返回当前页面数据的功能。然而,这种方法对大数据量的查询结果并不是最好的选择,这是因为:当DataAdapter用请求的结果填充DataTable或者DataSet时,数据库返回的资源仍是全部... -
ListView优化 不用ViewHolder(Google 不推荐) SimpleAdapter 就真的Simple了吗
2013-11-09 20:46:07现在很多人再给ListView的时候使用BaseAdapter来填充 在getView方法中 使用ViewHolder来优化 这中方法的确很达到优化的效果但仅仅是百分之70到80 很多人忽略了SimpleAdapter或者SimpleCursorAdapter(数据源在... -
android获取webservice接口的数据
2015-08-09 16:13:09前言 其实我不怎么会这个,我是边看源码边做翻译的,突然... 1、首先是给listview填充数据,那么就得发送网络请求对吧,看下面:2.我们点击cgquery方法到接口的实现类去,如下:3.我们先看BeanGeneralInquiries这个 -
何时调用getView?——从源码的角度给出解答
2015-07-23 22:15:00先来看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 -
Android App中ViewPager与Fragment结合的一些问题解决
2021-01-05 22:24:21adapter是一个控制器对象,负责从模型层获取数据,创建并填充必要的视图对象,将准备好的视图对象返回给ListView; 首先,通过调用adapter的getCount()方法,ListView询问数组列表中包含多少个对象(为避免出现数组... -
Android中的适配器Adapter
2019-08-28 16:58:17关于适配器的解释,简单的讲就是把要显示给用户的数据信息通过适当的模式动态的填充各种ListView,也可以看作是界面数据绑定的一种理解,它所操纵的数据一般都是一些比较复杂的数据,界面是有一定规律的Vi... -
对BaseAdapter进行封装
2016-08-17 12:58:36要想使用ListView展现数据,必须执行ListView的setAdapter方法,将数据填充给ListView。相信大家对Adapter的写法并不陌生,以下为常用的写法:class MyAdapter extends BaseAdapter { @Override -
flutter学习记录第二天
2020-06-11 23:01:023.flutter的listview有三种方式,一种静态数据很简单,两种动态数据,build的大数据全加载,spe的方便添加分割线和数据填充, 4,flutter的资源文件配置,需要空格一个都不能错。完全手打对了才行。 5,flutter... -
黑马安卓52期视频教程
2015-06-24 22:15:481.下拉刷新(填充数据和隐藏headerView) 2.下拉刷新(在TouchMove中显示headerView) 3.下拉刷新(处理3种状态切换) 4.下拉刷新(完成下拉刷新并更新UI) 5.下拉刷新(加载更多) 6.侧滑菜单(布局子view) 7.侧滑菜单(使用... -
VC之美化界面篇本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:
2009-06-17 10:17:32//填充数据 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.... -
C# for CSDN 乱七八糟的看不懂
2012-06-03 15:40:47定义 数组是一种排列有序的数据结构,包含于数组中的变量被称为数组的元素, 它们都有相同的类型。 数组声明 int [] array1 = new int[5]; int [,,] array3 = new int[10,20,30]; int [] array1 = new int[] {1,2,4}... -
net学习笔记及其他代码应用
2010-11-16 18:15:09DataAdapter:数据的集合,用语填充。 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 鼠标... -
C#高级编程(第6版).(清华出版.李铭译.黄静审校).part1
2016-07-13 17:41:259.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.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1
2013-08-19 05:43:51ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的... -
C#开发实战1200例(第1卷).(清华出版.王小科.王军.扫描版).part1
2016-06-16 20:55:43实例111 使用重载方法实现不同类型数据的计算 5.2 结构与类 实例112 通过结构计算矩形的面积 实例113 通过类继承计算梯形面积 实例114 封装类实现一个简单的计算器 实例115 使用面向对象思想查找字符串中的... -
C#开发实战1200例(第1卷).(清华出版.王小科.王军.扫描版).part2
2016-06-16 20:59:52实例111 使用重载方法实现不同类型数据的计算 5.2 结构与类 实例112 通过结构计算矩形的面积 实例113 通过类继承计算梯形面积 实例114 封装类实现一个简单的计算器 实例115 使用面向对象思想查找字符串中的... -
C#开发实战1200例(第1卷).(清华出版.王小科.王军.扫描版).part3
2016-06-16 21:02:21实例111 使用重载方法实现不同类型数据的计算 5.2 结构与类 实例112 通过结构计算矩形的面积 实例113 通过类继承计算梯形面积 实例114 封装类实现一个简单的计算器 实例115 使用面向对象思想查找字符串中的... -
ASP.NET开发实战1200例(第2卷).(清华出版.房大伟.吕双).part1
2016-06-12 09:54:23实例146 数据统计方法的封装(用户登录功能设计) 实例147 SqlParameter参数方式操作数据库(存储过程) 5.5 以备后患:数据库的备份与恢复 实例148 数据库的备份操作 实例149 数据库的还原操作 实例150 ... -
C#开发实战1200例(第一卷+第二卷)+源码下载地址.txt
2019-05-17 09:24:24实例111 使用重载方法实现不同类型数据的计算 135 5.2 结构与类 136 实例112 通过结构计算矩形的面积 136 实例113 通过类继承计算梯形面积 137 实例114 封装类实现一个简单的计算器 139 实例115 使用... -
C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载
2018-02-20 01:26:55实例111 使用重载方法实现不同类型数据的计算 135 5.2 结构与类 136 实例112 通过结构计算矩形的面积 136 实例113 通过类继承计算梯形面积 137 实例114 封装类实现一个简单的计算器 139 实例115 使用面向对象思想... -
C#高级编程(第6版)
2011-05-11 11:10:309.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:424.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...