自定义适配器
来源:互联网 发布:厦门长庚医院网络挂号 编辑:程序博客网 时间: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>
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 简单适配器(自定义适配器)
- 自定义ListView适配器onclick
- ListView自定义适配器
- ListView 之 自定义适配器
- 自定义适配器小结
- c++ protected
- Java虚拟机内存的堆区(heap),栈区(stack)和静态区(static/method)
- *C. Compartments----贪心
- 面对对象小结
- 总有你想知道的---Sikuli(1)
- 自定义适配器
- Raytracing 参考资料
- 百练noi 1775:采药
- 第二十四天正则表达式
- python爬虫进阶(二):动态网页爬取
- 如何在windows上将git diff配置成使用Beyond Compare
- 浅析设计模式–(二)装饰者模式
- web第一天
- python 面向对象编程