day4.05总结_Adapter和Listview的优化
2016-05-04 00:30
323 查看
一、CommonLayout 优化
1.优化继承体系(减少层次结构)
例如:借助merge标签实现相同布局的合并<merge xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button01" /> <Button 减少一层Framelayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button02" android:layout_gravity="right|top"/> </merge> |
2.重用layout对象
例如:借助include标签导入共用布局(一般是标题或底部或左右页面) <include layout="@layout/top_title_layout_1"/> |
3.实现对象的延迟加载(借助ViewStub)
layout_tv_1.xml |
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:textColor="#ffff0000" android:textSize="30sp" android:text="HelloWorld" android:gravity="center_horizontal"> </TextView> |
activity_main.xml |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <!-- 借助此标签实现元素的延迟加载 --> <ViewStub android:id="@+id/stub_id" 自身的ID android:inflatedId="@+id/tv01" 关联的页面的ID android:layout="@layout/layout_tv_1" 关联 android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_marginBottom="106dp" android:text="Button" android:onClick="onClick" /> </RelativeLayout> |
MainActivity |
package com.example.day02; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewStub; public class MainActivity extends Activity { ViewStub vs; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vs=(ViewStub) findViewById(R.id.stub_id); Log.i("TAG", "vs="+vs); /* View tv=findViewById(R.id.tv01); 没有使用时,tv为空 Log.i("TAG", "tv="+tv);*/ } public void onClick(View v){ vs.inflate();//加载对应的布局 在使用 View tv=findViewById(R.id.tv01); 使用后自动加载 Log.i("TAG", "tv="+tv); } } |
二、Adapterlayout
所有的AdapterLayout都直接或间接的继承了ViewGroup,并借助一个Adapter对象加载数据,构建item对象,然后以某种方式呈现给用户。
常用的AdapterLayout如下:
例子1:ArrayAdapter
MainActivity |
public class MainActivity extends Activity implements OnItemClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.构建或获得ListView对象 ListView lsv=(ListView)findViewById(R.id.lsvId); String data[]={"关于","张飞","赵云","黄忠","马超"}; //2.构建Adapter对象 ArrayAdapter<String> adapter= //new ArrayAdapter<String>(this,R.layout.list_item_res_1, data); new ArrayAdapter<String>(this, R.layout.list_item_res_2,R.id.tv02, data); //3.listview 关联adapter (this,在哪里显示,在哪里填充数据,数据) lsv.setAdapter(adapter); //4.添加监听器 lsv.setOnIte 4000 mClickListener(this); } /**当点击listview中的某个item时会自动执行此方法*/ @Override public void onItemClick( AdapterView<?> parent, //listview View view, //item view int position,//item 位置 long id) {//id 的值现阶段与position相等 Log.i("TAG","parent="+parent); Log.i("TAG","view="+view); TextView tv=(TextView)view.findViewById(R.id.tv02); View指当前那个View Toast.makeText(this,tv.getText(), 1).show(); } } |
list_item_res_2.xml |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tv02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="text" android:textSize="20sp" android:padding="10dp" /> </LinearLayout> |
activity_main.xml(显示的控件) |
<ListView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/lsvId" ListView 的ID android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > </ListView> |
例子2:SimpleAdater
list_item_3.xml |
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:columnCount="2" android:rowCount="2" > <ImageView android:id="@+id/imgId" android:layout_width="56dp" android:layout_height="56dp" android:layout_rowSpan="2" android:src="@drawable/png_01" /> <TextView android:id="@+id/tvId01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" android:layout_row="1" android:text="text02" /> <TextView android:id="@+id/tvId02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" android:layout_row="0" android:layout_marginTop="10dp" android:text="text01" /> </GridLayout> |
activity_main.xml |
<ListView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/lsvId" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > </ListView> |
MainActivity |
public class MainActivity extends Activity { private List<Map<String,Object>> data= new ArrayList<Map<String,Object>>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); //1.获得listview ListView lsv=(ListView) findViewById(R.id.lsvId); //2.创建adapter SimpleAdapter adapter= new SimpleAdapter(this,//context data, //List<? extends Map<String,?>> R.layout.list_item_3, //item layout new String[]{"imgKey","titleKey","dateKey"},//map中的key new int[]{R.id.imgId,R.id.tvId02,R.id.tvId01});//item layout 中的位置 //3.关联adapter lsv.setAdapter(adapter); } int imgs[]={R.drawable.png_01,R.drawable.png_02,R.drawable.png_03,R.drawable.png_04,R.drawable.png_05}; /**初始化数据(数据假的,将来网络的服务端)*/ private void initData(){ for(int i=0;i<5;i++){ Map<String,Object> map= new HashMap<String, Object>(); map.put("imgKey", imgs[i]); map.put("titleKey", "title"+i); map.put("dateKey", "2016-04-05"); data.add(map); } } } |
相关文章推荐
- windows下利用ffmpeg进行视频格式转换
- cocos2d-x-3.x snapshot
- Shell 备忘录【1】
- 布隆过滤器(Bloom Filter)Java实现 - printk(KERN
- PHP之时间处理
- day3.30总结_pull解析和反射
- 使用Rosecheckers檢查你的C程式碼
- 数据库优化思路
- Matlab中函数定义方法
- day3.29总结_XML_DOM解析
- MySQL数据库优化学习笔记
- 为ToolBar增加阴影特效
- Eclipse中设置断点并调试
- hdu 1800 Flying to the Mars
- JSP、servlet、SQL三者之间的数据传递
- hdu 2111 Saving HDU
- as--eclipse迁移到as中
- day3.25总结_字节流
- 广商14级软件工程分数:第七回合
- using pip behind a proxy