扩展BaseAdapter实现不存储列表项的ListView
下面的实例将会通过扩展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的更多相关文章
- android学习笔记——利用BaseAdapter生成40个列表项
RT: main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...
- Android 可拖动列表项的ListView
需求分析 一个界面内两个ListView 我关注的栏目列表 上面的要长按后可拖动排序 点击减号后列表项消失 下面列表增加一行 同时存储相应字符串到本地作为标记 未关注栏目列表 普通ListView 点 ...
- PyQt学习随笔:ListView控件增加列表项
ListView控件如果需要增加列表项,就是在对应数据存储中插入项,这又分两种情况,一种是已知列表数据存储,一种是未知数据存储.如果是未知数据存储,可以通过: ListView控件名.model() ...
- WPF界面设计技巧(5)—自定义列表项呈现内容
原文:WPF界面设计技巧(5)-自定义列表项呈现内容 接续上次的程序,稍微改动一下原有样式,并添加一个数据模板,我们就可以达成下面这样的显示功能: 鼠标悬停于文件列表项上,会在工具提示中显示图像缩略图 ...
- 安卓ListView中CheckBox的使用(支持Item列表项的删除,全选,全不选)
ListView 自身提供了 CheckBox 只需要添加一行代码 getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 但是这种实现 ...
- Android学习笔记(23):列表项的容器—AdapterView的子类们
AdapterView的子类的子类ListView.GridView.Spinner.Gallery.AdapterViewFlipper和StackView都是作为容器使用,Adapter负责提供各 ...
- WijmoJS 中自定义 React 菜单和列表项模板
WijmoJS 中自定义 React 菜单和列表项模板 在V2019.0 Update2 的全新版本中,React 框架下 WijmoJS 的前端UI组件功能再度增强. WijmoJS的菜单和类似列表 ...
- PyQt学习随笔:ListView控件删除一项列表项的方法
ListView控件可以通过控件对应数据存储删除列表项,具体使用: 数据存储.removeRow(元素索引位置) 删除指定位置的一个列表项. 数据存储如果不知道程序定义的数据存储名,可以通过model ...
- PyQt学习随笔:QtDesigner ListView控件列表项的初始化
在QtDesigner中设计的界面中添加ListView控件后,是没办法添加需要在ListView控件中显示的列表项.由于ListView控件只是一个展示列表项的视图控件,实现了界面与数据的分离,其要 ...
随机推荐
- u-boot添加一个hello命令
1.在common目录下建立一个cmd_hello.c文件 2.仿照/common/cmd_bootm.c文件修改,把cmd_bootm.c头文件复制过来 3.再复制do_bootm.U_BOOT_C ...
- zookeeper系列之异步通知模式-Watcher
1 watcher种类和事件种类 Watcher种类 1. zookeeper实例化时注入的默认Watcher 2. dataWatchers 一个Map<string Set<Watch ...
- Git 常用命令速查表(三)
http://blog.csdn.net/sunboy_2050/article/details/7529841
- 在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
Android的私钥和信任证书的格式必须是BKS格式的,通过配置本地JDK,让keytool可以生成BKS格式的私钥和信任证书,java本身没有BouncyCastle密库 服务端: Java代码 ...
- css一行内容过多显示省略号
四个缺一不可. 效果如下图
- ubuntu 系统 opencv3.1.0 安装
opencv编译安装 编译环境安装: sudo apt-get install build-essential 必需包安装: sudo apt-get install cmake git libgtk ...
- oc js 交互
http://blog.csdn.net/lwjok2007/article/details/47058101 iOS调JS http://blog.csdn.net/lwjok2007/ar ...
- (简单) POJ 1062 昂贵的聘礼,Dijkstra。
Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家 拿不出这么多金币,便请求酋长降 ...
- 解决phpcms V9缩略图模糊的方法
解决V9缩略图模糊/libs/classes/image.class.php注释掉else imagecopyresized($thumbimg, $srcimg, 0, 0, $psrc_x, ...
- 部署项目时遇到的问题---IIS7.X配置ASP.NET MVC4
1.安装.NET Frameword4.0框架.如果先装IIS后装4.0框架的话,要在IIS注册4.0框架.具体方法见下图 .NET框架版本请根据操作系统版本自行选择.注册完后,在“ISAPI和CGI ...