自定义ListView的几种方法
2015-11-27 16:08
197 查看
先创建好自定义的layout布局 item.xml
自定义适配器,此代码中有三种方法,分别是效率由高到低
最后就是MainActivity的代码和其布局文件
MainActivity
如有不对,望大家指教,谢谢
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/lv_imageview" android:layout_width="60dp" android:layout_height="60dp" android:src="@drawable/ic_launcher"/> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="30dp" android:layout_toEndOf="@+id/lv_imageview" android:layout_toRightOf="@+id/lv_imageview" android:text="Title" android:gravity="center" android:textSize="25sp"/> <TextView android:id="@+id/tv_content" android:layout_width="match_parent" android:layout_height="30dp" android:layout_toEndOf="@+id/lv_imageview" android:layout_toRightOf="@+id/lv_imageview" android:layout_below="@+id/tv_title" android:text="Content" android:gravity="center_vertical" android:textSize="20sp"/> </RelativeLayout>自定义实体类 ItemBean
package com.example.baseadapter; public class ItemBean { public int ImageResid; public String title; public String ItemContent; public ItemBean(int imageResid, String title, String itemContent) { super(); ImageResid = imageResid; this.title = title; this.ItemContent = itemContent; } }
自定义适配器,此代码中有三种方法,分别是效率由高到低
package com.example.baseadapter; import java.util.List; 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 MyAdapter extends BaseAdapter{ private List<ItemBean> mList; private LayoutInflater mLayoutInflater; private long mSumTime = 0; public MyAdapter(Context context,List<ItemBean> list){ mLayoutInflater = LayoutInflater.from(context); mList = list; } @Override public int getCount() { // TODO Auto-generated method stub return mList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mList.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub /** * 效率最低 * 没有利用到listview的缓存机制,没有任何的优化处理,效率低,浪费资源 23409907 * * */ long start = System.nanoTime();//获取系统的纳秒事件 View view = mLayoutInflater.inflate(R.layout.item, null); ImageView mImageView = (ImageView)view.findViewById(R.id.lv_imageview); TextView mTextViewTitle = (TextView) view.findViewById(R.id.tv_title); TextView mTextViewContent = (TextView) view.findViewById(R.id.tv_content); ItemBean itemBean = mList.get(position); mImageView.setImageResource(itemBean.ImageResid); mTextViewContent.setText(itemBean.ItemContent); mTextViewTitle.setText(itemBean.title); long end = System.nanoTime(); long mValue = end - start; mSumTime += mValue; System.out.println(mSumTime); return view; /** *效率第二创建方法 1472730 * 充分的利用了李斯特view的缓存特性,如果没有缓存才创建新的View */ /*long start = System.nanoTime();//获取系统的纳秒事件 if (convertView == null){ convertView = mLayoutInflater.inflate(R.layout.item, null); } ImageView mImageView = (ImageView)convertView.findViewById(R.id.lv_imageview); TextView mTextViewTitle = (TextView) convertView.findViewById(R.id.tv_title); TextView mTextViewContent = (TextView) convertView.findViewById(R.id.tv_content); ItemBean itemBean = mList.get(position); mImageView.setImageResource(itemBean.ImageResid); mTextViewContent.setText(itemBean.ItemContent); mTextViewTitle.setText(itemBean.title); long end = System.nanoTime(); long mValue = end - start; mSumTime += mValue; System.out.println(mSumTime); return convertView;*/ /* * 效率较高创建listView 7376228 * long start = System.nanoTime();//获取系统的纳秒事件 if (convertView == null){ VieweHolder vieweHolder = new VieweHolder(); convertView = mLayoutInflater.inflate(R.layout.item, null); vieweHolder.mImageView = (ImageView) convertView.findViewById(R.id.lv_imageview); vieweHolder.mTextViewContent = (TextView)convertView.findViewById(R.id.tv_content); vieweHolder.mTextViewTitle = (TextView) convertView.findViewById(R.id.tv_title); convertView.setTag(vieweHolder); }else{ VieweHolder VieweHolder = (VieweHolder)convertView.getTag(); } ItemBean itemBean = mList.get(position); VieweHolder.mImageView.setImageResource(itemBean.ImageResid); VieweHolder.mTextViewContent.setText(itemBean.ItemContent); VieweHolder.mTextViewTitle.setText(itemBean.title); long end = System.nanoTime(); long mValue = end - start; mSumTime += mValue; System.out.println(mSumTime); return convertView;*/ } static class VieweHolder{ public static ImageView mImageView; public static TextView mTextViewTitle; public static TextView mTextViewContent; } }
最后就是MainActivity的代码和其布局文件
MainActivity
package com.example.baseadapter; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ListView; public class MainActivity extends Activity { private ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<ItemBean> itembeanList = new ArrayList<ItemBean>(); for (int i = 0; i < 20; i++){ itembeanList.add(new ItemBean(R.drawable.ic_launcher, "TITLE"+i+"", "CONTENT"+i+"")); } mListView = (ListView)findViewById(R.id.listview); mListView.setAdapter(new MyAdapter(MainActivity.this, itembeanList)); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }MainActivity_Layout
<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" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="16dp" android:paddingBottom="16dp" tools:context="com.example.baseadapter.MainActivity" > <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" > </ListView> </RelativeLayout>
如有不对,望大家指教,谢谢
相关文章推荐
- SSH:Hibernate框架(Hibernate三种检索方式详解)
- exe4j使用与破解
- Linux 文件删除 注意事项
- JQ---选项卡
- 安卓 获取imageview的bitmap,并保存,用于app头像上传获取
- poj2674 弹性碰撞
- IOS拍照或者相册 uiimage裁剪
- 委托和事件(二)
- 学习日记--测试startActivityForResult
- jQuery.ajaxForm的使用
- Linux查看系统信息的一些命令及查看已安装软件包的命令(转)
- 各类BUG - 2
- 目标检测的图像特征提取之HOG特征
- XAML命名空间
- 弱类型、强类型、动态类型、静态类型语言的区别
- Canvas画圆
- 21. Magento 创建新闻模块(2)
- Mybatis 缓存策略
- 设计模式--2、代理模式
- 使用 Hive 作为 ETL 或 ELT 工具