ListView

来源:互联网 发布:开淘宝店的 编辑:程序博客网 时间:2024/06/13 12:24
1.创建项目
2.在activity_main.xml中添加ListView布局
<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:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity" >

   <ListView
       android:id="@+id/listView1"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
        />
   </RelativeLayout>
3.新建一个布局item.xml,添加一个ImageView,和两个TextView布局,该布局的内容为在ListView中显示的列表
<?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" >
   
   <ImageView 
       android:id="@+id/imageView1"
       android:layout_width="60dp"
       android:layout_height="60dp"
       android:src="@drawable/ic_launcher"
       />   
   <TextView 
       android:id="@+id/textView1"
       android:layout_width="match_parent"
       android:layout_height="30dp"
       android:text="Title"
       android:layout_toEndOf="@id/imageView1"
       android:gravity="center"
       android:textSize="25sp"
       />    
   <TextView 
       android:id="@+id/textView2"
       android:layout_width="match_parent"
       android:layout_height="30dp"
       android:text="Content"
       android:layout_toEndOf="@id/imageView1"
       android:layout_below="@id/textView1"
       android:textSize="20sp"
       />
</RelativeLayout>
4.创建item.xml文件中控件对应的实体类
package com.example.listviewdemo;


public class ItemBean {
private int imageId;
private String title;
private String content;

public ItemBean(int imageId, String title, String content) {
super();
this.imageId = imageId;
this.title = title;
this.content = content;
}

public int getImageId() {
return imageId;
}

public void setImageId(int imageId) {
this.imageId = imageId;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

}
5.在MainActivity中创建一个集合,添加测试数据
package com.example.listviewdemo;

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<ItemBean> list = new  ArrayList<ItemBean>();
for(int i=0;i<10;i++){
list.add(new ItemBean(R.drawable.ic_launcher, "我是标题"+i, "我是内容"+i));
}
}
}
6.创建适配器类,继承BaseAdapter类,重写其方法
package com.example.listviewdemo;

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 {
//这里定义的mList是存放传进来的数据
private List<ItemBean> mList;
private LayoutInflater fInflater;

//构造方法  List<ItemBean> list-->对应的MainActivity中定义的list
public MyAdapter(Context context,List<ItemBean> list){
this.mList = list;
初始化LayoutInflater对象
this.fInflater=LayoutInflater.from(context);

}
@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) {

return null;
}
}
7.适配器操作ListView的三种方式
一.@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
//将xml文件转换成view 效率低下,比较消耗资源,不建议使用
//逗比式
View view = fInflater.inflate(R.layout.item, null);
ImageView img = (ImageView) view.findViewById(R.id.imageView1);
TextView tv1 = (TextView) view.findViewById(R.id.textView1);
TextView tv2 = (TextView) view.findViewById(R.id.textView2);
ItemBean bean = mList.get(position);
img.setImageResource(bean.getImageId());
tv1.setText(bean.getTitle());
tv2.setText(bean.getContent());
return view;
}
二.@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
//将xml文件转换成view
//普通式  通过convertView 充分利用了listview缓存机制,避免重复利用convertView对象
if(convertView==null){
convertView= fInflater.inflate(R.layout.item, null);
}
ImageView img = (ImageView) convertView.findViewById(R.id.imageView1);
TextView tv1 = (TextView) convertView.findViewById(R.id.textView1);
TextView tv2 = (TextView) convertView.findViewById(R.id.textView2);
ItemBean bean = mList.get(position);
img.setImageResource(bean.getImageId());
tv1.setText(bean.getTitle());
tv2.setText(bean.getContent());
return convertView;
}
三.//创建内部类ViewHolder,定义item布局中的三个控件,避免重复的findById的操作
class ViewHolder{
public TextView title,content;
public ImageView img;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
//文艺式 
if(convertView==null){
viewHolder = new ViewHolder();
convertView= fInflater.inflate(R.layout.item, null);
viewHolder.img=(ImageView) convertView.findViewById(R.id.imageView1);
viewHolder.title=(TextView) convertView.findViewById(R.id.textView1);
viewHolder.content =(TextView) convertView.findViewById(R.id.textView2);
//通过此方法将convertView和viewHolder绑定
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
ItemBean bean = mList.get(position);
viewHolder.img.setImageResource(bean.getImageId());
viewHolder.title.setText(bean.getTitle());
viewHolder.content.setText(bean.getContent());
return convertView;
}
8.在MainActivity中,将ListView和适配器进行绑定
ListView listView = (ListView) findViewById(R.id.listView1);
listView.setAdapter(new MyAdapter(this, list));
0 0
原创粉丝点击