ListAdapter列表适配器其实是继承了BaseAdapter

示例图:

MainActivity
package com.shaoxin.mylistadapter;

import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import static com.shaoxin.mylistadapter.R.drawable.b;
import static com.shaoxin.mylistadapter.R.drawable.c; public class MainActivity extends ListActivity {
private List<Map> list;
private String[] strPerson = {"妹子", "美女", "美美", "大美女"};
private int[] iDrawble = {R.drawable.a, b, c, R.drawable.d};
MyAdapter myAdapter;
private float fFirstx;
private float fSecx; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView textView = (TextView) view.findViewById(R.id.txt);
Log.v("msg", textView.getText().toString());
}
});
list = new ArrayList<>();
for (int i = 0; i < strPerson.length; i++) {
Map map = new HashMap();
map.put("person", strPerson[i]);
map.put("id", iDrawble[i]);
list.add(map);
}
myAdapter = new MyAdapter();
setListAdapter(myAdapter);
} public class MyAdapter extends BaseAdapter { @Override
public int getCount() {
return list.size();
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHold viewHold = new ViewHold();
if (convertView == null) {
convertView = View.inflate(MainActivity.this, R.layout.listview_item, null);
viewHold.strName = (TextView) convertView.findViewById(R.id.txt);
viewHold.iDrawable = (ImageView) convertView.findViewById(R.id.img);
viewHold.button = (Button) convertView.findViewById(R.id.btn_del);
convertView.setTag(viewHold);
} else {
viewHold = (ViewHold) convertView.getTag();
}
viewHold.iDrawable.setImageResource((Integer) list.get(position).get("id"));
viewHold.strName.setText(list.get(position).get("person").toString());
viewHold.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.remove(position);
myAdapter.notifyDataSetChanged();
}
});
convertView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
fSecx = event.getX();
if ((fSecx - fFirstx) > 10) {
ViewHold viewHold = (ViewHold) v.getTag();
viewHold.button.setVisibility(Button.VISIBLE);
viewHold.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.remove(position);
myAdapter.notifyDataSetChanged();
}
});
}
break;
case MotionEvent.ACTION_DOWN:
fFirstx = event.getX();
break;
case MotionEvent.ACTION_MOVE:
break;
}
return true;
}
});
return convertView;
} class ViewHold {
private TextView strName;
private ImageView iDrawable;
private Button button;
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int position) {
return 0;
}
}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.shaoxin.mylistadapter.MainActivity"> <ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

listview_item.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="match_parent"> <ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:maxHeight="100dp"
android:maxWidth="100dp"
android:src="@mipmap/ic_launcher" /> <TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/img"
android:layout_toEndOf="@+id/img"
android:layout_toRightOf="@+id/img"
android:text="hello world" /> <Button
android:id="@+id/btn_del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除"
android:layout_alignBaseline="@+id/txt"
android:visibility="gone"
android:layout_alignBottom="@+id/txt"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>

ListAdapter列表适配器的更多相关文章

  1. Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)

    Android应用--简.美音乐播放器获取专辑图片(自定义列表适配器) 2013年7月3日简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词 ...

  2. <Android>列表、网格、画廊视图及适配器的绑定

    列表视图和适配器的绑定 列表视图既可以使用ListView组件,也可以继承ListActivity.显示可以是ArrayAdapter,也可以是游标SimpleCursorAdapter,还可以是继承 ...

  3. Android列表类视图之基本适配器BaseAdapter

    说到列表视图,不难联想到前面提到过的数组适配器,但是数组适配器只能搭建文本选择项,扩展能力并不强,Android提供了一种适应性更强的基本适配器BaseAdapter,该适配器允许开发者在别的代码中进 ...

  4. android打造万能的适配器(转)

    荒废了两天,今天与大家分享一个ListView的适配器 前段时间在学习慕课网的视频,觉得这种实现方式较好,便记录了下来,最近的项目中也使用了多次,节省了大量的代码,特此拿来与大家分享一下. 还是先看图 ...

  5. android listview 三种适配器设置

    1: public class ArrayAdapterActivity extends ListActivity { @Override public void onCreate(Bundle sa ...

  6. Android SwipeActionAdapter结合Pinnedheaderlistview实现复杂列表的左右滑动操作

    在上一篇博客<Android 使用SwipeActionAdapter开源库实现简单列表的左右滑动操作>里,已经介绍了利用SwipeActionAdapter来左右滑动操作列表: 然,有时 ...

  7. Android使用Mono c#分段列表视图

    下载source code - 21.7 KB 你想知道如何把多个ListView控件放到一个布局中,但是让它们在显示时表现正确吗 多个列表项?你对它们正确滚动有问题吗?这个例子将向你展示如何组合单独 ...

  8. Android 自定义列表指示器

    在联系人界面 可以看到这种界面 手指快速滑动右边滑动条时 可以显示相应的字母图标 android里提供了android.widget.SectionIndexer这个接口去实现该效果 可是只能显示字母 ...

  9. 一起学android之怎样获取手机程序列表以及程序相关信息并启动指定程序 (26)

    效果图: 程序列表: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFpX3FpbmdfeHVfa29uZw==/font/5a6L5L2T/fonts ...

随机推荐

  1. 《JavaScript高级程序设计(第3版)》笔记-第1章-JavaScript 简介

    PS:第一章内容实在不多,就把前些日子看过的记录整理了一下,先发上来. 1.1 JavaScript 简史 1.JavaScript诞生前期目的主要是为了处理这种简单的表单验证. 1.2 JavaSc ...

  2. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  3. 【Make a H5 game】JS for beginner——FROM U2B

    https://www.youtube.com/watch?v=F2Dc-JlwgN4&feature=iv&src_vid=WfL4LNUL3R0&annotation_id ...

  4. REDHAT一总复习1 NTP更改时区,并验证时区设置是否正确

    把计算机时区调整到巴哈马(这是个啥地方?听都没听过.) 使用 tzselect  进行确定时区,并进行可对话性的设置,按照对应的序号,射进去就行了. 使用:timedatectl set-timezo ...

  5. ObjC运行时部分概念解析(二)

    上篇文章简单的说明了两个关键字究竟是什么,这里主要讲讲ObjC中各种基本内存模型 Method typedef struct objc_method *Method; struct objc_meth ...

  6. ES5新语法forEach和map及封装原理

    ### forEach 在es5中提供了forEach方法进行遍历,其实就是模仿了jQuery中each方法,不过将 i 于v进行了调换,下面两种方法进行对比一下 var arr = [ 11, 22 ...

  7. py

    import httplib,urllib import re import random def Login(userid,password): params=urllib.urlencode({' ...

  8. java多线程中关于join方法的使用

    Thread的非静态方法join()让一个线程B"加入"到另外一个线程A的尾部.在A执行完毕之前,B不能工作.例如:         Thread t = new MyThread ...

  9. 伪元素::after和::before

    ::after是一个CSS伪元素,使用::after,你可以从CSS里往页面上新增内容(不再要在HTML里有相应的东西).虽然最终生成的东西并不是真正的DOM里的内容,但这些内容能像普通内容一样显示, ...

  10. 「LeetCode」全部题解

    花了将近 20 多天的业余时间,把 LeetCode 上面的题目做完了,毕竟还是针对面试的题目,代码量都不是特别大,难度和 OJ 上面也差了一大截. 关于二叉树和链表方面考察变成基本功的题目特别多,其 ...