android之ListView的Adapter使用

在做一个小练习的时候,又遇到了Adapter,才发现以前没有对它进行过记录现在介绍一下:其实Adapter就是数据和视图之间的桥梁,数据在adapter中做处理,然后显示到ListView上面Adapter有很多种,有ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter,Resource

大家好,又见面了,我是全栈君。

在做一个小练习的时候,又遇到了Adapter,才发现以前没有对它进行过记录

现在介绍一下:

其实Adapter就是数据和视图之间的桥梁,数据在adapter中做处理,然后显示到ListView上面

Adapter有很多种,有ArrayAdapter<T>, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter,ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter.

这里就以ArrayAdapter<T>为例来介绍

我自己写的一个例子:

有两个类,一个是主界面Activity,用来处理输入和显示,效果图在最下面,可以翻到最后看一下,布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	>
	<LinearLayout
		android:orientation="horizontal"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		>
		<TextView	
			android:layout_width="wrap_content" 
			android:layout_height="wrap_content" 
			android:text="Name:"
			/>
		<EditText android:id="@+id/name"
			android:layout_width="fill_parent" 
			android:layout_height="wrap_content" 
			/>
	</LinearLayout>
	<LinearLayout
		android:orientation="horizontal"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		>
		<TextView	
			android:layout_width="wrap_content" 
			android:layout_height="wrap_content" 
			android:text="Address:"
			/>
		<EditText android:id="@+id/addr"
			android:layout_width="fill_parent" 
			android:layout_height="wrap_content" 
			/>
	</LinearLayout>
	<Button android:id="@+id/save"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:text="Save"
	/>
</LinearLayout>

java代码如下:

public class LunchList extends Activity {
	List<Restaurant> model=new ArrayList<Restaurant>();
	ArrayAdapter<Restaurant> adapter=null;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		Button save=(Button)findViewById(R.id.save);
		
		save.setOnClickListener(onSave);
		
		ListView list=(ListView)findViewById(R.id.restaurants);
		
		adapter=new ArrayAdapter<Restaurant>(this,android.R.layout.simple_list_item_1,model);//这行代码在下面解释
		list.setAdapter(adapter);//为ListView设置我们配置好的适配器
	}
	
	private View.OnClickListener onSave=new View.OnClickListener() {
		public void onClick(View v) {
			Restaurant r=new Restaurant();
			EditText name=(EditText)findViewById(R.id.name);
			EditText address=(EditText)findViewById(R.id.addr);
			
			r.setName(name.getText().toString());
			r.setAddress(address.getText().toString());
			
			RadioGroup types=(RadioGroup)findViewById(R.id.types);
			
			switch (types.getCheckedRadioButtonId()) {
				case R.id.sit_down:
					r.setType("sit_down");
					break;
					
				case R.id.take_out:
					r.setType("take_out");
					break;
					
				case R.id.delivery:
					r.setType("delivery");
					break;
			}
			
			adapter.add(r);//每个增加的条目都会添加到适配器里面
		}
	};
}

针对上面的进行解释:

1. 适配器的作用是数据和视图之间的桥梁

2. 这个小例子是要显示一个数组,我们就用ArrayAdapter,数组适配器,数据的数据类型<>是Restaurant类型的(下面的定义),数据的数据类型还可以是其他的包括对象类型的

3. adapter=new ArrayAdapter<Restaurant>(this, android.R.layout.simple_list_item_1, model);

这段代码是创建一个数组适配器的代码,里面有三个参数,第一个参数是上下文,就是当前的Activity, 第二个参数是android sdk中自己内置的一个布局,它里面只有一个TextView,这个参数是表明我们数组中每一条数据的布局是这个view,就是将每一条数据都显示在这个view上面;第三个参数就是我们要显示的数据,这个数据是以List<Restaurant>的形式存在的,当然我们在设置的时候这个数组里面还没有数据,数据时候来调用adapter.add(r);加入进去的.

listView会根据这三个参数,遍历adapterData里面的每一条数据,读出一条,显示到第二个参数对应的布局中,这样就形成了我们看到的listView. 

 

其实就是两个EditText和一个RadioGroup,用来采集输入的数据,然后存储到下面这个类里面:

package apt.tutorial;

public class Restaurant {
	private String name="";
	private String address="";
	private String type="";
	
	public String getName() {
		return(name);
	}
	
	public void setName(String name) {
		this.name=name;
	}
	
	public String getAddress() {
		return(address);
	}
	
	public void setAddress(String address) {
		this.address=address;
	}
	
	public String getType() {
		return(type);
	}
	
	public void setType(String type) {
		this.type=type;
	}
	
	public String toString() {
		return(getName());
	}
}

每增加一个存储,就会在ListView里面显示出来一个
执行之后效果图如下:

android之ListView的Adapter使用

 

如果还是不很明白,下面这个网上的代码段更加清晰:

package com.cz.list.demo; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
 
public class ArrayListDemo extends Activity { 
    private ListView listView; 
    private String[] adapterData; 
 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.array_list_layout); 
 
        /* 找到这个listView */ 
        listView = (ListView) findViewById(R.id.array_list); 
 
        /* 我们要在listView上面显示的数据,放到一个数组中 */ 
        adapterData = new String[] { "Afghanistan", "Albania", "Algeria", 
                "American Samoa", "Andorra", "Angola", "Anguilla", 
                "Antarctica", "Antigua and Barbuda", "Argentina", "Armenia", 
                "Aruba", "Australia", "Austria", "Azerbaijan", "Bahrain", 
                "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", 
                "Benin", "Bermuda", "Bhutan", "Bolivia", 
                "Bosnia and Herzegovina", "Botswana", "Bouvet Island" }; 
 
        /* 下面就是对适配器进行配置了 */ 
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>( ArrayListDemo.this, android.R.layout.simple_list_item_1, adapterData); 
 
        /* 设置ListView的Adapter */ 
        listView.setAdapter(arrayAdapter); 
    } 
} 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121434.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一阶惯性滤波特点_一阶惯性环节仿真

    一阶惯性滤波特点_一阶惯性环节仿真一阶惯性环节采用后置反馈的方式可以实现较精确的系统跟踪性能。上述系统的传递函数为因此启动性能良好,另,一阶惯性环节无超调量,因此可通过修改反馈参数实现最优的跟踪性能。因此在针对温度等变化较小的物理量方面的控制上是较占优势的,但精确跟踪也就意味着出现高频干扰、低频干扰、白噪声时,传感器也会精确地将这些干扰输出。这对一些容易受到干扰的系统是极为不利的。如下图为加入高频正弦信号后上述系统的输出(幅值为1,频率为1000(rad/sec))可见,系统虽然有一定的滤波性能(正弦输出

    2022年10月4日
    0
  • 决策树模型的用途_决策树模型怎么建立

    决策树模型的用途_决策树模型怎么建立概念定义在特征空间与类空间上的条件概率分布,即给定特征条件下类的条件概率分布;也可以认为是if-then规则的集合优点模型具有可读性,分类速度快。模型首先,介绍一下决策树模型:由结点和有向边组成,结点又可分为内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。决策树与条件概率分布决策树所表示的条件概率分布由各个单元给定条件下的类的条件概率分布组成。若X表…

    2022年10月21日
    0
  • pix2pix模型(雪花算法原理)

    一、算法名称Pix2pix算法(Image-to-ImageTranslation,图像翻译)来源于论文:Image-to-ImageTranslationwithConditionalAdversarialNetworks二、算法简要介绍、研究背景与意义2.1介绍图像处理、图形学和视觉中的许多问题都涉及到将输入图像转换为相应的输出图像。这些问题通常使用特定于应用程序的算法来处理,尽管设置总是相同的:将像素映射到像素。条件对抗性网(cGAN)是一种通用的解决方案,它似乎能很好地解决各

    2022年4月11日
    145
  • 阿里云服务器使用freessl配置免费证书Nginx

    阿里云服务器使用freessl配置免费证书Nginx环境:阿里云服务器购买的域名服务器:linux+nginxSSL证书:FreeSSL申请的免费证书步骤1、申请ssl证书具体参考二哥的“五分钟搞定HTTPS配置,二哥手把手教”https://blog.csdn.net/qing_gee/article/details/90031376博客,这位大佬写的很详细了2、配置阿里云服务器2.1、上传证书登陆阿里云控制台,搜索“ssl证书应用安全”,上传原有证书,注意一定要将证书转换为pem格式2.2、开启服务器443.

    2025年6月11日
    0
  • WCF基金会

    WCF基金会

    2022年1月13日
    46
  • Mybatis中传递多个参数的4种方法总结[通俗易懂]

    Mybatis中传递多个参数的4种方法总结[通俗易懂]方法1:顺序传参法#{}里面的数字代表你传入参数的顺序。这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。方法2:@Param注解传参法#{}里面的名称对应的是注解 @Param括号里面修饰的名称。这种方法在参数不多的情况还是比较直观的,推荐使用。方法3:Map传参法#{}里面的名称对应的是 Map里面的key名称。这种方法适合传递多个参数…

    2022年6月13日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号