下面的实例将会通过扩展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. 2016"百度之星" - 资格赛(Astar Round1) Problem A

    保存前缀乘,询问的时候输出c[ri]/c[li-1]即可,因为是除法,所以计算一下c[li-1]的逆元. #include <stdio.h> #include <math.h> ...

  2. ScrollView的fillViewPort属性

    ScrollView嵌套Relative时候会发生问题,RelativeLayout不会充满ScrollView,即使设置match_parent属性也不行 这个时候就需要fillViewPort属性 ...

  3. Eclipse 快捷键使用

    ctrl+shift+T //查找当前工程下的某个类   实时提示 ctrl+shift+R//查找当前工程下的某个文件   实时提示 ctrl+/添加注释 Ctrl+1 快速修复(最经典的快捷键,就 ...

  4. The 2014 ACMICPC Asia Regional Guangzhou Online

    [A]-_-/// [B]线段树+位运算(感觉可出) [C]地图BFS,找最长线 [D]地图BFS,加上各种复杂情况的最短路-_- [E]-_-/// [F]三分+圆与线段的交点,计算几何 [G]-_ ...

  5. js 各种常用js验证

    判断http或者https var http = 'https:' == document.location.protocol ? false : true; js的类型检测方式 /**** js的类 ...

  6. man info --help区别

    --help: 是一个工具选项,可以用来显示一些工具的信息 man : 可以显示系统手册页中的内容,这些内容大多数都是对命令的解释信息 PS: () Space 键可以显示下一屏的文本信息 () q ...

  7. log4cxx第三篇----使用多个logger

    使用多个logger时,所有logger的配置写在一个配置文件里面 两个例子: 1 一个继承的例子(http://logging.apache.org/log4cxx/) // file com/fo ...

  8. MySQL master/slave 模式

    1 .复制 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的 数据复制到其它主机(slaves)上,并重 ...

  9. iOS开发之监听键盘高度的变化

    最近做的项目中,有一个类似微博中的评论转发功能,屏幕底端有一个输入框用textView来做,当textView成为第一响应者的时候它的Y值随着键盘高度的改变而改变,保证textView紧贴着键盘,但又 ...

  10. ios 屏幕方向的设置

    ref: http://www.cnblogs.com/niit-soft-518/p/5611298.html 实际的项目需求.root是TabBarController,里面有4个navigati ...