自定义适配器

来源:互联网 发布:厦门长庚医院网络挂号 编辑:程序博客网 时间:2024/05/18 03:37

一、自定义适配器的实现。代码如下:


1、activity
import java.util.ArrayList;
import java.util.HashMap;


import com.zpark.day05_01.adapter.MyAdapter;
import com.zpark.day05_01_baseadapter.R;


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


public class MainActivity extends Activity {


private ListView listView;

private ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String,Object>>();

private int[] imgs = {R.drawable.p1, R.drawable.p2, R.drawable.p3, R.drawable.p4
, R.drawable.p5, R.drawable.p6, R.drawable.p7, R.drawable.p8};

private String[] names = {"广场","大楼","学校","酒店","火车站","飞机场","大山","大海"};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
listView = (ListView) findViewById(R.id.lv);
//封装ListView要使用的数据
for(int i = 0; i < 8; i++){
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("IMG", imgs[i]);
map.put("NAME", names[i]);
dataList.add(map);
}

MyAdapter mAdapter = new MyAdapter(MainActivity.this, dataList);
listView.setAdapter(mAdapter);
}
}


XML布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


</LinearLayout>


2、Adapter

import java.util.ArrayList;
import java.util.HashMap;


import com.zpark.day05_01.activity.ImageActivity;
import com.zpark.day05_01_baseadapter.R;


import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


public class MyAdapter extends BaseAdapter {


private Context adapterContext;

//作用:把布局文件转换成为视图对象
private LayoutInflater layoutInflater;

private ArrayList<HashMap<String, Object>> list;

public MyAdapter(Context context, ArrayList<HashMap<String, Object>> dataList) {
adapterContext = context;
list = dataList;
layoutInflater = LayoutInflater.from(adapterContext);
}

//该方法用于指定ListView显示的行数
@Override
public int getCount() {
return list.size();
}


//该方法用于获取ListView每一行的数据
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}


//该方法用于返回每一行的编号
@Override
public long getItemId(int position) {
return 0;
}


/**
* 没有复用的写法

//该方法用于指定ListView的每一行显示什么内容
//参数一:被显示的当前行的索引值
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//第一步:每一行显示什么控件
View view = layoutInflater.inflate(R.layout.item_layout, null);
//第二步:每一行的控件显示什么数据
 //a.获取每一行的子控件
ImageView imgView = (ImageView) view.findViewById(R.id.img);
TextView txtView = (TextView) view.findViewById(R.id.txt);
 //b.给每一个子控件设置数据
HashMap<String, Object> itemData = list.get(position);//获取到当前行的数据
   //设置图片
int imgId = (Integer) itemData.get("IMG");
imgView.setImageResource(imgId);
   //设置文字
String name = (String) itemData.get("NAME");
txtView.setText(name);
//第三步:把设置好数据的View返回,显示到当前行中
return view;
}
*/


/**
* 有复用的写法
*/
//该方法用于指定ListView的每一行显示什么内容
//参数一:被显示的当前行的索引值
   //参数二:被传递的view对象
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

if(convertView == null){
//第一步:每一行显示什么控件
convertView = layoutInflater.inflate(R.layout.item_layout, null);
 //创建ViewHolder缓存每一行的子控件对象
ViewHolder holder = new ViewHolder();
holder.imgView = (ImageView) convertView.findViewById(R.id.img);
holder.txtView = (TextView) convertView.findViewById(R.id.txt);
convertView.setTag(holder);
}

ViewHolder holder = (ViewHolder) convertView.getTag();
//第二步:每一行的控件显示什么数据
 //b.给每一个子控件设置数据
HashMap<String, Object> itemData = list.get(position);//获取到当前行的数据
   //设置图片
final int imgId = (Integer) itemData.get("IMG");
holder.imgView.setImageResource(imgId);
   //设置文字
final String name = (String) itemData.get("NAME");
holder.txtView.setText(name);
  //给ImageView添加点击事件监听器
holder.imgView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
//Toast.makeText(adapterContext, "img" + position, 0).show();
//创建Intent启动显示图片的Activity
Intent intent = new Intent(adapterContext, ImageActivity.class);
intent.putExtra("IMGID", imgId);
adapterContext.startActivity(intent);
}
});
 
  //给TextView添加点击事件监听器
holder.txtView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Toast.makeText(adapterContext, "欢迎来到" + name, 0).show();
}
});

//第三步:把设置好数据的View返回,显示到当前行中
return convertView;
}

//当复用的时候,缓存ListView每一行的子控件对象的引用
private class ViewHolder{
public ImageView imgView;
public TextView txtView;
}
}


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:minHeight="90dp"
    android:gravity="center_vertical"
    android:orientation="horizontal" >
    
    <ImageView 
        android:id="@+id/img"
        android:scaleType="centerCrop"
        android:layout_width="70dp"
        android:layout_height="70dp"/>
    
    <TextView android:id="@+id/txt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>


</LinearLayout>


3、


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;


public class ImageActivity extends Activity {

private ImageView imgView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image_layout);
imgView = (ImageView) findViewById(R.id.img);
Intent intent = getIntent();
int imgId = intent.getIntExtra("IMGID", -100);
imgView.setImageResource(imgId);
}


}


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" >
    
    <ImageView 
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>


</LinearLayout>

原创粉丝点击