android高级控件ListView
来源:互联网 发布:武汉育才行知小学校歌 编辑:程序博客网 时间:2024/05/10 15:36
android高级控件
目标内容:1、ListView列表控件 2、自定义适配器Adapter 3、ListView 4、ListView实现图文混排 5、ListView集合网络HTTP操作
*强调一下线性布局,水平时,左右对其生效!垂直时,上下对其生效!
GridView组件;以网格方式排列视图,与矩阵类似(相册)
android:numColums = "auto_fit";//最大的列数(自动分配)android:verticalSpacing = "10dp";//列与列之间的间隙android:horizontalSpacing = "10dp";//行与行之间的间隙android:columnWidth = "90dp";每一列的列宽定成90dp,那么不管显示多大的图片或文件都是这么宽android:stretMode="columnWidth";//缩放拉伸与列宽大小同步
1、ListView列表控件(android最重要的控件)———Item:条目
- 是一个视图组,用于展示列表的数据;在复杂控件中(Composite)
- MVC架构
- M:模型层 —- javaBean —- personList(personList是存储person对象的集合)
- V:视图层 —- jsp —-ListView
- C:控制层 —- servlet —-Adapter
- 适配器
adapter = new ArrayAdapter<String>(Context,textViewResourceId,Objects);//Context通常是上下文,用MainActivity.this;//textViewResourceId是选择样式,通常用android。R.layout.simple_list_item_multiple_choice;设置多选,跟下面listview设置的多选相对应。//Objects表示对象,即内容对象!这里面是一个集合,可以自己写的获取集合的方法;也可以从资源文件里面找自己写在xml文件中的资源//设置listView的选中模式listView.setChoiceMode(choiceMode);listView.setChoiceMode(listView.CHOICE_MODE_MULTIPLE);//多选模式,可以设置单选CHOICE_MODE_SINGLE
- ListView事件
listView.setOnItemClickListener(new OnItemClickListener(){});
adapter.notifyDataSetChanged();一旦适配器有数据就通知listView更新数据
BaseAdapter自定义适配器
class MyAdapter extends BaseAdapter{ //必须定义的方法;系统调用;获取listView中有多少元素 @Override public int getCount(){ //return 50; //return listView.size(); } //必须定义的方法;由系统调用,获取一个View对象,作为ListView的条目;ListView的每个条目都是View对象 @Override public int getView(int position,View convertView,ViewGroup parent){ //position:本次getView方法调用所返回的View对象,在listView中是处于第几个条目,那么position就等于几,从0开始 TextView tv =new TextView(MainActivity.this);//所有控件都是View的子类,创建什么都行 Person p =personList.get(position); tv.setText(p.toString()); tv.setTextSize(18); return tv; } @Override public int getItem(){ return null; } @Override public int getItemId(){ return 0; } }
ListView对象的填充:只要是view都能用ListView来填充;
- 代码写布局适用于界面的微调,而整体设计布局用布局文件来做
- 把每个条目都当成一个View,并写一个布局文件:buju.xml,就完成了布局嵌套;
把布局文件填充成一个View对象
- 三种填充写法:
- 第一种:View v = View.inflate(MainActivity.this,R.layout.buju,null);
- 第二种:获取布局填充器对象
-
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
//使用布局填充器填充布局文件
View v2 = inflater.inflate(R.layout.Item_listview,null); - 第三种:
//getSystemService();获取很多的系统管理器LayoutInflater inflater2 = (LayoutInflater)getSystemService(LAOUT_INFLATER_SERVICE);
//案例代码:class MyAdapter extends BaseAdapter{ //必须定义的方法;系统调用;获取listView中有多少元素 @Override public int getCount(){ //return 50; //return listView.size(); } //必须定义的方法;由系统调用,获取一个View对象,作为ListView的条目;ListView的每个条目都是View对象 @Override public int getView(int position,View convertView,ViewGroup parent){ //position:本次getView方法调用所返回的View对象,在listView中是处于第几个条目,那么position就等于几,从0开始 Person p =personList.get(position); //把布局文件填充成一个View对象 View v = View.inflate(MainActivity.this,R.layout.buju,null); //findViewById前面用v对象,否则默认找的是主Activity界面了 TextView tv_name = (TextView)v.findViewById(R.id.tv_name); return v; } @Override public int getItem(){ return null; } @Override public int getItemId(){ return 0; }}
ListView优化
- 以上代码是,向上、向下滚动就重新新建了view,而没有使用缓存技术
public int getView(int position,View convertView,ViewGroup parent){}中的convertView就是缓存
//代码改进class MyAdapter extends BaseAdapter{ //必须定义的方法;系统调用;获取listView中有多少元素 @Override public int getCount(){ //return 50; //return listView.size(); } //必须定义的方法;由系统调用,获取一个View对象,作为ListView的条目;ListView的每个条目都是View对象 @Override public int getView(int position,View convertView,ViewGroup parent){ //position:本次getView方法调用所返回的View对象,在listView中是处于第几个条目,那么position就等于几,从0开始 Person p =personList.get(position); View v = null; //判断条目是否有缓存 if(convertView == null){ //把布局文件填充成一个View对象 v = View.inflate(MainActivity.this,R.layout.buju,null); }else if(){ v = convertView; } //findViewById前面用v对象,否则默认找的是主Activity界面了 TextView tv_name = (TextView)v.findViewById(R.id.tv_name); return v; } @Override public int getItem(){ return null; } @Override public int getItemId(){ return 0; } }
理解每一个参数代表什么!不能死记!!!!
ArrayAdapter :数组适配器
- 传的参数是一个String[] 数组,所以当需求是只处理一种数据时,推荐使用这个;并且ArrayAdapter只能处理一种数据。
- ArrayAdapter adapter = new ArrayAdapter(this,R.layout.zidingyibuju,R.id.tv_name,String[]);
SimpleAdapter:简单适配器
比ArrayAdapter强大一点,传的参数是一个List
ListView和ScrollView冲突
public boolean dispatchTouchEvent(MotionEvent ev) { if(ev.getAction() == MotionEvent.ACTION_MOVE){ //先让哪个控件先执行,//就设置直接调用哪个 listView.dispatchTouchEvent(ev); } if(is_scroll_move){ scrollView.dispatchTouchEvent(ev); } return super.dispatchTouchEvent(ev);}启动activity的OnCreate中设置:Private Boolean is_move;Private Boolean is_scroll_move;listView.setOnScrollListener(new OnScrollListener()){ public void onScrollStateChanged(AbsListView view,int scrollState ){ if(is_move && ScrollState==OnScrollListener.SCROLL_STATE_IDLE) //表示用户从ListView滑动到底端 is_scroll_move =true; } public void onScroll(AbsListView view,int firstVisibleItem,int visibleItemCount,int totalItemCount){ is_move = (firstVisibleItem + visibleItemCount == totalItemCount); }});
0 0
- android高级控件ListView
- ListView android高级控件
- android高级控件-ListView
- Android高级控件之ListView
- Android高级UI控件—ListView
- Android UI高级控件中的ListView
- Android—高级控件(二)ListView
- ListView控件高级应用
- 高级控件Listview
- Android07-高级控件-ListView
- Android高级控件之ExpandableListView可以展开的listview
- Android高级控件ListView和GridView原理分析
- Android高级控件系列之ListView的用法
- Android—高级控件(二)ListView 优化版
- Android高级控件之AutoCompleteTextView,MultiAutopleteTextView,Spinner,ListView,ExpandableListView
- android listview高级用法
- android listview 高级使用
- Windows应用程序高级控件之ListView控件
- Swift——Command failed due to signal: Segmentation fault: 11
- sicily 1344. 数列
- ubuntu 解决 “E: Problem wih MergeList /var/lib/apt/lists/”错误
- iOS之Drawing<2>
- 2015年终总结,忙碌和无所事事的一年
- android高级控件ListView
- iOS 程序图标AppIcon和启动页面LaunchImage设置 —— HERO博客
- android传递数据bundle封装传递map对象
- 单例模式线程安全的实现方式
- opencv笔记 3.访问图像元素的四种方法
- Objective-数组操作
- ptlib编译时,会自动扫描电脑系统,找出头文件以及库文件并进行引用,生成头文件ptbuildopts.h
- HDU 1848 Fibonacci again and again(博弈_SG函数)
- ListView的多选模式