自定义ListView的几种方法
来源:互联网 发布:天刀网络延迟 编辑:程序博客网 时间:2024/05/22 02:04
先创建好自定义的layout布局 item.xml
如有不对,望大家指教,谢谢
<?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;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mList.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn mList.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic 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;@Overrideprotected 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));}@Overridepublic 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;}@Overridepublic 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>
如有不对,望大家指教,谢谢
0 0
- 自定义ListView的几种方法
- 关于listview的自定义adapter不执行getview()方法的几种情况和解决办法
- 更新ListView的几种方法
- ListView更新的几种方法
- 7、ListView的几种适配器及自定义适配器
- ListView的几种适配器及自定义适配器
- 自定义的tabBarController的几种方法
- js自定义对象的几种方法
- Matlab自定义函数的几种方法
- 自定义UITableViewCell的几种方法
- 自定义View的几种方法
- Matlab自定义函数的几种方法
- 自定义uitableviewcell的几种运用方法
- Matlab自定义函数的几种方法
- iOS自定义UITabBar的几种方法
- Matlab自定义函数的几种方法
- Matlab自定义函数的几种方法
- matlab自定义函数的几种方法
- 腾讯bugly crash追踪平台的使用(一)(挺好用的喔!)
- 委托和事件(二)
- SSH:Hibernate框架(Hibernate三种检索方式详解)
- OpenJudge_P0090 滑雪
- 线段树模板
- 自定义ListView的几种方法
- Saliency程序代码分享
- JavaScript DOM学习总结(二)
- 工业4.0,给我们的未来敲响了一个警钟
- XMLHttpRequest cannot load file:///D
- Java中List的排序
- JAVA自然语言处理NLP工具包
- Android SQLite数据库操作——增(二)
- 获取移动网络的状态及移动网络的开启与关闭