这是一个懒人听书的界面布局设计,在列表视图上添加了按钮,并且为按钮添加事件。
这里有个小问题,一屏幕上不能够全部显示列表,那么未显示的列表会在你滑动屏幕时绘制出来。如果没有优化,那么每一次滑动屏幕,都会在内存访问一次资源文件,那么这样降低了内存的利用率,影响用户体验;但是谷歌提在内存中供了一小块空间用作缓存已经读取过的资源文件,但是未显示的列表仍然会再次绘制,这样会导致列表内容会随机地显示出来,没有顺序性。所以在程序设计中要使用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>