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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • iwara_php,iwara里版mmd怎么下载_iwara里版mmd资源下载方法_软件侠下载站[通俗易懂]

    iwara_php,iwara里版mmd怎么下载_iwara里版mmd资源下载方法_软件侠下载站[通俗易懂]很多朋友发现iwara里版的一些mmd无法下载,下面小编就给大家带来iwara里版的mmd下载教程,这教程主要是针对T站没有改版以前上传的视频,改版以后上传的视频都是能直接下载的例:http://ecchi.iwara.tv/videos/voazs0aaulqvl67搜狗浏览器读取源代码文件页面view-source:http://ecchi.iwara.tv/videos/voazs0aau…

    2022年10月2日
    2
  • java中字符串分割特殊字符处理_java字符串按照特定字符分割

    java中字符串分割特殊字符处理_java字符串按照特定字符分割String类型的对象在用split()方法进行字符分割的时候常常会遇到用特殊字符进行分割的情况,看JDK知道split()实际上是用的正则实现的分割,当遇到一些用特殊字符作为分割标志的时候,不使用特殊手段就会抛出java.util.regex.PatternSyntaxException异常,比如用java中的运算符号,括号等等这个时候可以使用split(“[*]”)split(“//+”)来…

    2022年9月30日
    3
  • css3中的width:100vh以及calc(100vh + 10px)

    css3中的width:100vh以及calc(100vh + 10px)vh/vwvh:相对于视窗的高度,视窗被均分为100单位的vh;vw:相对于视窗的宽度,视窗被均分为100单位的vw;vmax:相对于视窗的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax;vmin:相对于视窗的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin;视区所指为浏览器内部的可视区域大小,即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小。calccalc是英

    2022年4月29日
    92
  • git pull 合并分支或者push时,报错:“Please enter a commit messagemerge is necessary,especi”的解决办法(亲测可行)

    git pull 合并分支或者push时,报错:“Please enter a commit messagemerge is necessary,especi”的解决办法(亲测可行)

    2022年2月18日
    61
  • Centos 7镜像官网下载

    Centos 7镜像官网下载换了mac,安装虚拟机到时候,下载Centos7镜像,发现到官网下载试了好几个国内镜像,发现根本下不下来,下载进度一直是0.0,可能是网络问题吧,可是我试了家里到Wi-Fi,公司到Wi-Fi,也连了自己手机分出来的热点,发现还是一样,我不禁纳闷了,以前在windows上下载过到,虽然很大,但是花费一些时间还是能下载下来到。于是我试了一下下面这个清华大学的镜像,发现可以下载,并且下载速度非常快,…

    2022年10月20日
    1
  • es6 set和map_数据结构什么叫度

    es6 set和map_数据结构什么叫度Set和Map的区别1.Map保存键值对,任何值都可以作为键值的值。2.Set保存的是类数组数据,是值的集合。

    2025年9月28日
    2

发表回复

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

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