自定义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
原创粉丝点击