列表视图自定义适配器

这是一个懒人听书的界面布局设计,在列表视图上添加了按钮,并且为按钮添加事件。

这里有个小问题,一屏幕上不能够全部显示列表,那么未显示的列表会在你滑动屏幕时绘制出来。如果没有优化,那么每一次滑动屏幕,都会在内存访问一次资源文件,那么这样降低了内存的利用率,影响用户体验;但是谷歌提在内存中供了一小块空间用作缓存已经读取过的资源文件,但是未显示的列表仍然会再次绘制,这样会导致列表内容会随机地显示出来,没有顺序性。所以在程序设计中要使用ViewHolder,类似一块缓存,只访问一次资源文件,大大提高了内存的效率。

java代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.lovo.R;
import com.lovo.adapter.LazyListAdapter;

public class LazyMainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.lazybook_layout);
		//列表视图每一行显示的文本
		String [] textAry = new String[]{
			"英语学习1","财政2","时评3",
			"英语学习4","财政5","时评6",
			"英语学习7","财政8","时评9"
		};
		
		List list = new ArrayList();
		for(int i = 0;i < textAry.length;i++){
			Map map = new HashMap();//存放键值对
			map.put("text", textAry[i]);
			map.put("button", textAry[i]);
			list.add(map);
			
		}		
		//SimpleAdapter adapter = new SimpleAdapter(this, list, 
		//R.layout.lazybook_listview_content, new String[]{"text","button"},
		// new int[]{R.id.textView1,R.id.button1});
		
		//new一个自定义适配对象
		LazyListAdapter adapter = new LazyListAdapter(
				this, 
				textAry, 
				R.layout.lazybook_listview_content);
		
		ListView listView = (ListView) findViewById(R.id.listView1);
		listView.setAdapter(adapter);	
	}
}

 

自定义适配器java代码:

import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.lovo.R;

/**
 * 自定义适配器
 * 
 * @author DB
 * 
 */
public class LazyListAdapter extends BaseAdapter {
	/**文本数组*/
	private String[] textAry;
	/**界面*/
	private Activity activity;
	/**资源Id*/
	private int resourceId;

	public LazyListAdapter(Activity activity, String[] textAry, int resourceId) {
		this.activity = activity;
		this.textAry = textAry;
		this.resourceId = resourceId;
	}
	/**
	 * 得到文本数组的长度
	 */
	@Override
	public int getCount() {
		return textAry.length;
	}
	@Override
	public Object getItem(int arg0) {
		return textAry[arg0];
	}

	@Override
	public long getItemId(int position) {
		return position;
	}
	/**
	 * position:每次需要绘制组件的序号 
	 * convertView:放在listView或gridView中每一行的View对象
	 * parent:当前这行组件的父组件对象
	 */
	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {

		ViewHolder holder = null;
		// 如果首次绘制没有convertView,则通过布局资源文件进行创建
		if (convertView == null) {
			// 得到每一行的布局资源文件
			convertView = activity.getLayoutInflater().inflate(resourceId, null);
			holder = new ViewHolder();
			holder.textView =  (TextView) convertView.findViewById(
					R.id.lazybook_listview_textView1);
			holder.button = (Button) convertView.findViewById(
					R.id.lazybook_listview_button1);
			//将组建的缓存对象保存到convertView
			convertView.setTag(holder);

		}else{
			holder = (ViewHolder) convertView.getTag();
		}
		
		// 设置每一行内组件的内容
		holder.textView.setText(textAry[position]);
		holder.button.setText(textAry[position]);
		holder.button.setOnClickListener(new OnClickListener() {
			//单击列表视图上的按钮弹出一个消息
			@Override
			public void onClick(View v) {
				Toast.makeText(activity, "点击按钮" + textAry[position],
						Toast.LENGTH_SHORT).show();
			}
		});
		return convertView;
	}
	//利用内部类来创建一个ViewHolder对象(类似缓存),,存放已经绘制过的数据,不需要重复地访问资源文件,提高内存的效率
	private class ViewHolder{
		public TextView textView;
		public Button button;
	}

}


 

懒人听书界面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="vertical"
    >

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/title_bg" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:text="懒人听书"
            android:textSize="20sp" />

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="10dp"
            android:src="@drawable/ic_btn_search" />
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/home_online_tab_bg"
        android:gravity="center"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_weight="1"
            android:background="@drawable/home_online_tab_select"
            android:gravity="center"
            android:text="分类" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="最新" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="最热" />

        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="推荐" />
    </LinearLayout>

   
 <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1000"
      />
    <LinearLayout
        android:id="@+id/lazybook_linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/home_tab_bg" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:background="@drawable/home_tab_bg_select" >

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:src="@drawable/home" />

            <TextView
                android:id="@+id/textView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/imageView2"
                android:layout_centerHorizontal="true"
                android:text="在线收听"
                android:textColor="#fff" />

        </RelativeLayout>

        <RelativeLayout
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:gravity="center_vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:src="@drawable/sign_down" />

            <TextView
                android:id="@+id/textView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/imageView2"
                android:layout_centerHorizontal="true"
                android:text="我的下载"
                android:textColor="#fff" />
        </RelativeLayout>

        <RelativeLayout
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:gravity="center_vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:src="@drawable/clock" />

            <TextView
                android:id="@+id/textView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/imageView2"
                android:layout_centerHorizontal="true"
                android:text="收藏·历史"
                android:textColor="#fff" />
        </RelativeLayout>

        <RelativeLayout
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:gravity="center_vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:src="@drawable/arrow" />

            <TextView
                android:id="@+id/textView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/imageView2"
                android:layout_centerHorizontal="true"
                android:text="更多"
                android:textColor="#fff" />
        </RelativeLayout>

    </LinearLayout>

</LinearLayout>


 

列表视图content XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="15dp"
    android:paddingBottom="15dp"
     >
    <ImageView
        android:id="@+id/lazybook_listview_imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="15dp"
        android:src="@drawable/disc" />

    <TextView
        android:id="@+id/lazybook_listview_textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/lazybook_listview_imageView1"
        android:layout_marginLeft="10dp"
        android:textSize="20sp" />

    <ImageView
        android:id="@+id/lazybook_listview_imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="20dp"
        android:src="@drawable/right_arrow" />

    <Button
        android:id="@+id/lazybook_listview_button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/lazybook_listview_textView1"
         />

</RelativeLayout>
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值