下面的实例将会通过扩展BaseAdapter来实现Adapter,扩展BaseAdapter可以取得对Adapter最大的控制权;程序要创建多个列表项,每个列表项的组件都由开发者来决定。

下面的布局文件非常简单,布局文件只包含一个简单的ListView,布局文件代码如下:

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

该实例的Activity将会扩展BaseAdapter来实现Adapter对象,Activity代码如下:

程序清单文件:

package org.crazyit.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*; public class BaseAdapterTest extends Activity {
ListView myList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_adapter_test);
myList=(ListView)findViewById(R.id.myList);
BaseAdapter adapter=new BaseAdapter()
{
@Override
public int getCount() {
// TODO Auto-generated method stub
//指定一共包含40个选项
return 40;
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
//重写该方法,该方法的返回值将作为列表项的ID
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
//重写该方法,该方法返回的View将作为列表框
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
//创建一个LinearLayout,并向其中添加两个组件 LinearLayout line=new LinearLayout(BaseAdapterTest.this); line.setOrientation(0); ImageView image=new ImageView(BaseAdapterTest.this);
image.setImageResource(R.drawable.ic_launcher);
TextView text=new TextView(BaseAdapterTest.this);
text.setText("第"+(position+1)+"个列表项");
text.setTextSize(20);
text.setTextColor(Color.RED);
line.addView(image);
line.addView(text); return
line; } };
myList.setAdapter(adapter);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.base_adapter_test, menu);
return true;
} }

上面程序中的关键在于粗体字代码,粗体字代码创建了一个BaseAdapter对象,扩展该对象需要重写如下4个方法。

  • getCount():该方法的返回值控制该Adapter将会包含多少列表项目。
  • getItem(int position):该方法的返回值决定第position处的列表项的内容。
  • getItemId(int position):该方法的返回值决定第position处的列表项的ID。
  • getView(int positon,View convertView,ViewGroup parent):该方法的返回值决定第position处的列表项的组件。

上面4个方法中最重要的是第1个与第4个。

表面上看此处只是在介绍ListView,但是实际上这里的知识完全适用于AdapterView的其他子类:GridView、Spinner、Gallery、AdapterViewFlipper等。

运行上面的Activity程序将会出现如下效果:

扩展BaseAdapter实现不存储列表项的ListView的更多相关文章

  1. android学习笔记——利用BaseAdapter生成40个列表项

    RT: main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...

  2. Android 可拖动列表项的ListView

    需求分析 一个界面内两个ListView 我关注的栏目列表 上面的要长按后可拖动排序 点击减号后列表项消失 下面列表增加一行 同时存储相应字符串到本地作为标记 未关注栏目列表 普通ListView 点 ...

  3. PyQt学习随笔:ListView控件增加列表项

    ListView控件如果需要增加列表项,就是在对应数据存储中插入项,这又分两种情况,一种是已知列表数据存储,一种是未知数据存储.如果是未知数据存储,可以通过: ListView控件名.model() ...

  4. WPF界面设计技巧(5)—自定义列表项呈现内容

    原文:WPF界面设计技巧(5)-自定义列表项呈现内容 接续上次的程序,稍微改动一下原有样式,并添加一个数据模板,我们就可以达成下面这样的显示功能: 鼠标悬停于文件列表项上,会在工具提示中显示图像缩略图 ...

  5. 安卓ListView中CheckBox的使用(支持Item列表项的删除,全选,全不选)

    ListView 自身提供了 CheckBox 只需要添加一行代码 getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 但是这种实现 ...

  6. Android学习笔记(23):列表项的容器—AdapterView的子类们

    AdapterView的子类的子类ListView.GridView.Spinner.Gallery.AdapterViewFlipper和StackView都是作为容器使用,Adapter负责提供各 ...

  7. WijmoJS 中自定义 React 菜单和列表项模板

    WijmoJS 中自定义 React 菜单和列表项模板 在V2019.0 Update2 的全新版本中,React 框架下 WijmoJS 的前端UI组件功能再度增强. WijmoJS的菜单和类似列表 ...

  8. PyQt学习随笔:ListView控件删除一项列表项的方法

    ListView控件可以通过控件对应数据存储删除列表项,具体使用: 数据存储.removeRow(元素索引位置) 删除指定位置的一个列表项. 数据存储如果不知道程序定义的数据存储名,可以通过model ...

  9. PyQt学习随笔:QtDesigner ListView控件列表项的初始化

    在QtDesigner中设计的界面中添加ListView控件后,是没办法添加需要在ListView控件中显示的列表项.由于ListView控件只是一个展示列表项的视图控件,实现了界面与数据的分离,其要 ...

随机推荐

  1. linux下提示bash:command not found

    新安装的linux系统,如果进行精简安装可能会出现bash:command not found 的提示,大家在安装的时候可以选择默认安装basic的组件,一般即可.到时候可以再升级.   如果新装的系 ...

  2. mysql连接不上Uncaught exception 'PDOException' with message 'could not find driver

    需要给你的PHP加一个PDO扩展打开PHP.INI 把extension=php_pdo.dll 前面的分号去掉 重启APACHE. extension=php_pdo_mysql.dll

  3. DEDECMS模板中dede标签使用php和if判断语句的方法

    先来看看下面这个标签{dede:field.tong_gg php=yes}if(@me==""||empty(@me))@me="<p>无</p> ...

  4. The 2014 ACM-ICPC Asia Mudanjiang Regional

    继续复盘之前的Regional......出题者说这一套题太简单,对当时没有AK很不满......真是醉了,弱校没法活了 [A]签到题 [B]树结构,树的中心 [C]-_-/// [D]概率DP [E ...

  5. deb安装了些啥?

    http://www.cyberciti.biz/faq/view-contents-of-deb-file/

  6. Lua学习系列(四)

    lua 资源:http://www.dcc.ufrj.br/~fabiom/lua/ 第一个Lua程序 http://www.dcc.ufrj.br/~fabiom/lua/ 原文:https://w ...

  7. php单元测试到底是什么东西呢?

    前言: 真正写php代码也有3年时间了,勉强算是一个php程序员, 但是,心底却一直没有底气. 都说测试驱动开发,可我连程序开发中什么是单元测试?这种基本的程序员的素养都 还不是很清楚,痛定思痛,决定 ...

  8. 用div做下拉列表

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Laravel Eloquent get获取空的数据问题

    在用laravel框架来获取数据,若数据不存在时,以为会返回空,其实不是的,其实是一个 collection 值,会返回如下: object(Illuminate\Database\Eloquent\ ...

  10. Redis数据备份和重启恢复

    一.对Redis持久化的探讨与理解 目前Redis持久化的方式有两种: RDB 和 AOF 首先,我们应该明确持久化的数据有什么用,答案是用于重启后的数据恢复. Redis是一个内存数据库,无论是RD ...