Android开发之ListView中BaseAdapter的使用

BaseAdapter,官网链接--http://developer.android.com/intl/zh-cn/reference/android/widget/BaseAdapter.html

继承:Object

接口:ListAdapter  SpinnerAdapter

已知直接子类:

ArrayAdapter<T>, CursorAdapter, SimpleAdapter

已知间接子类:

ResourceCursorAdapter, SimpleCursorAdapter

使用BaseAdapter,需要实现4个方法:

getCount()                                                                          --返回需要ListView显示的item数量
getItem(int position)                                                            --返回item的位置
getItemId(int position)                                                         --返回item的id
getView(int position, View convertView, ViewGroup parent)      --显示item的内容

--------------------------------------------------------------------------------------------------------------------------------------

实例(创建一个通讯录):

MainActivity.java代码

 1 public class MainActivity extends Activity {
 2
 3     private ListView phoneList;
 4     private MyAdapter adapter;
 5
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10         GetPhone.getPhone(MainActivity.this);
11         phoneList = (ListView) findViewById(R.id.phoneList);
12         adapter = new MyAdapter(GetPhone.lists, MainActivity.this);
13         phoneList.setAdapter(adapter);
14     }
15
16 }
布局文件activity_main.xml
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     tools:context="com.lijingbo.getmyphonenumber.MainActivity" >
 7
 8     <ListView
 9         android:id="@+id/phoneList"
10         android:layout_width="match_parent"
11         android:layout_height="match_parent" >
12     </ListView>
13
14 </LinearLayout>

获取通讯录中联系人的姓名和号码,GetPhone.java

 1 public class GetPhone {
 2
 3     static List<PhoneInfo> lists = new ArrayList<PhoneInfo>();
 4
 5     public static List<PhoneInfo> getPhone(Context context) {
 6
 7         ContentResolver contentResolver = context.getContentResolver();
 8         Cursor cursor = contentResolver.query(Phone.CONTENT_URI, null, null,
 9                 null, null);
10         while (cursor.moveToNext()) {
11             String number = cursor.getString(cursor
12                     .getColumnIndex(Phone.NUMBER));
13             String name = cursor.getString(cursor
14                     .getColumnIndex(Phone.DISPLAY_NAME));
15             Log.d("getmyphonenumber", name + "电话号码:" + number);
16             PhoneInfo phoneInfo = new PhoneInfo(name, number);
17             lists.add(phoneInfo);
18         }
19         return lists;
20     }
21 }

实体类 PhoneInfo.java

 1 public class PhoneInfo {
 2
 3     private String name;
 4     private String number;
 5
 6     public PhoneInfo(String name, String number) {
 7         setName(name);
 8         setNumber(number);
 9
10     }
11
12     public String getName() {
13         return name;
14     }
15
16     public void setName(String name) {
17         this.name = name;
18     }
19
20     public String getNumber() {
21         return number;
22     }
23
24     public void setNumber(String number) {
25         this.number = number;
26     }
27
28 }

MyAdapter.java

 1 public class MyAdapter extends BaseAdapter {
 2
 3     private List<PhoneInfo> lists;
 4     private Context context;
 5
 6     public MyAdapter(List<PhoneInfo> lists,Context context){
 7         this.lists=lists;
 8         this.context=context;
 9     }
10
11     @Override
12     public int getCount() {
13         return lists.size();
14     }
15
16     @Override
17     public Object getItem(int position) {
18         return position;
19     }
20
21     @Override
22     public long getItemId(int position) {
23         return position;
24     }
25
26     @Override
27     public View getView(int position, View convertView, ViewGroup parent) {
28         ViewHolder holder=null;
29         if (convertView==null) {
30             holder=new ViewHolder();
31             convertView=LayoutInflater.from(context).inflate(R.layout.phonedetails, null);
32             holder.showName=(TextView) convertView.findViewById(R.id.showName);
33             holder.showNumber=(TextView) convertView.findViewById(R.id.showNumber);
34             convertView.setTag(holder);
35         }else {
36             holder=(ViewHolder) convertView.getTag();
37         }
38         holder.showName.setText(lists.get(position).getName());
39         holder.showNumber.setText(lists.get(position).getNumber());
40         return convertView;
41     }
42
43     static class ViewHolder{
44         public TextView showName;
45         public TextView showNumber;
46     }
47
48 }
phonedetails.xml文件
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="horizontal" >
 6
 7     <TextView
 8         android:id="@+id/showName"
 9         android:layout_width="0dp"
10         android:layout_height="wrap_content"
11         android:layout_weight="1"
12         android:text="name"/>
13     <TextView
14         android:id="@+id/showNumber"
15         android:layout_width="0dp"
16         android:layout_weight="1"
17         android:layout_height="wrap_content"
18         android:text="number"/>
19
20 </LinearLayout>
 
时间: 2024-12-30 10:53:49

Android开发之ListView中BaseAdapter的使用的相关文章

Android开发之ListView中Adapter的优化

ListView是Android开发最常用的控件,适配器adapter是将要显示的数据映射到View中并添加到ListView中显示 在实现ListView时,我们需要定义适配器如BaseAdapter.ArrayAdapter.CursorAdapter.SimpleAdapter等,并且重写其一下四个方法: 1 public int getCount(): 2 public Object getItem(int position) 3  public long getItemId(int p

Android开发之ListView中的Button点击设置

在ListView的Item中,如果有Button控件,那么要实现Button和Item点击都有响应,可以将Item的Layout中Button的focusable属性设为false,然后设置layout的属性android:descendantFocusability="blocksDescendants". 代码如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLay

【转】Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 [原文链接] 这篇文章完美的解决了我几个月没结论的bug... 感谢热爱分享的技术达人~ 我是怎么走进这个大坑的..... 需求: 在listview中出一个EditText 接受用户输入消息. 前期解决方案: 给这个EditText绑定焦点事件.... 悲剧就开始了... 知道吗?当这个EditTextView被点了下,它的焦点就不断的获取,失去,获取,失去...  只点一下... 就频繁的重复..最后大部

Android开发之ListView添加多种布局效果演示

在这个案例中展示的新闻列表,使用到ListView控件,然后在适配器中添加多种布局效果,这里通过重写BaseAdapter类中的 getViewType()和getItemViewType()来做判断,指定ListView列表中指定位置的item加载对应的布局,在 getView中返回对应的视图,之前由于不清楚getViewTypeCount()和getItemViewType()方法,使用得比较少,一直以 为需要添加多个适配器,现在看来当时的想法说明自己见识还不够,哈哈. 第一步:创建放置Li

Android开发之ListView排序

下面是activity: [java] view plaincopy public class MainActivity extends Activity { private ListView mListView = null; private List<TestDate> mList = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s

Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)

我们有时候会遇到这么一个情况.就是我在一个ListView里面需要显示的东西其实是有种类之分的.比如我要分冬天,夏天,秋天,春天,然后在这每个季节下面再去加载各自的条目数据.还有,比如我们的通讯录,我们需要按A,B,C这样的字母顺序分类然后显示.这个怎么实现呢? 下面我们不用ExpandableListView,而是只用ListView来实现这一显示效果. MainActivity.java [java] view plaincopy package com.xzq.listviewadapte

Android开发之ListView条目批量选择删除

ListView实现的列表,假设是可编辑,可删除的,一般都要提供批量删除功能,否则的话,一项一项的删除体验非常不好,也给用户带来了非常大的麻烦. 实现效果图 详细实现代码 select.xml 主布局文件包括一个ListView另一个隐藏的布局,包括了两个Button一个TextView,默认布局为gone,当监听到长按响应事件时候显示. 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayou

Android开发之ListView利用OnScrollListener实现分页加载数据

上篇博文和大家分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了.通过分页分次加载数据,用户看多少就去加载多少. 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载.另一种是当用户滑动到底部时自动加载.今天我就和大家分享一下这个功能的实现.

Android开发之ADT中无Annotation Processin的解决办法

使用ButterKnife的时候,进入ADT中设置的时候发现在Java Compiler展开后无Annotation Processin 解决办法: 安装插件:Juno - http://download.eclipse.org/releases/juno中的Eclipse Java Development Tools 安装方法: 1.Help->Install New Software 2.在 Work with 中选择 Juno - http://download.eclipse.org/r