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


相关推荐

  • Celer推出基于原子交换技术的跨链桥方案cBridge,今日主网上线

    Celer推出基于原子交换技术的跨链桥方案cBridge,今日主网上线据官方消息,CelercBridgev1.0版本今天正式主网上线。cBridge是一个支持高速低成本的跨链支付网络,用户可以立即使用cBridge在Ethereum、Arbitrum、BinanceSmartChain以及Polygon进行高速低成本跨链和跨层转账(cbridge.celer.network)。cBridge将会在短期内支持更多的layer2和layer1区块链的跨链和跨层转账。此外,任何人都将能够通过运行cBridge节点加入cBridge网络以提供跨链跨层流动性,同时通过收取手

    2022年5月4日
    45
  • provideoplayer2中文教程_potplayer vr

    provideoplayer2中文教程_potplayer vrPotplayer是高清影视常用的播放器,界面简洁,功能齐全,比MPC-HC和MPC-BE更人性化;但其默认方案十分糟糕,预设过多错误,无法正确播放10-bit视频,一直饱受诟病。VCB-Stuido以往发布的数篇高清教程大多偏重于madVR,在PotPlayer的设置方面有些错漏。为了广大观众能正确、便捷地用PotPlayer享受高清影视,我们为大家带来一篇基于Pot…

    2022年9月14日
    2
  • 斯坦福大学机器学习——EM算法求解高斯混合模型

    斯坦福大学机器学习——EM算法求解高斯混合模型EM算法(Expection-Maximizationalgorithm,EM)是一种迭代算法,通过E步和M步两大迭代步骤,每次迭代都使极大似然函数增加。但是,由于初始值的不同,可能会使似然函数陷入局部最优。下面来谈谈EM算法以及其在求解高斯混合模型中的作用。

    2022年6月28日
    30
  • MySQl 忘记密码怎么办?

    MySQl 忘记密码怎么办?MySQl忘记密码怎么办?我们在安装使用MySQl时,有时可能避免不了忘记密码,如果你忘记密码,可以按照如下方案进行操作:找到my.ini文件my.ini文件为MySQl设置文件,如果你是默认的安装地址,文件在C:\ProgramData\MySQL\MySQLServer5.7下但是ProgramData常规状态下是隐藏的设置权限认证跳过也就是在[my…

    2022年5月13日
    38
  • 前端技巧|vue双向绑定原理,助你面试成功「建议收藏」

    前端技巧|vue双向绑定原理,助你面试成功「建议收藏」在面试一些大厂的时候,面试官可能会问到你vue双向数据绑定的原理是什么?有些小伙伴不知道是什么东西,这样你在面试官的眼里就大打折扣了。今天小千就来给大家介绍一下vue的双向绑定原理,千万不要错过啦。vue双向绑定大家其实对于这个问题不会很陌生,vue中采用mvvm的模式,内置vm将view层与model层两者进行关联,任何一方的变化都会让另外一方受到影响。那回答完后,面试官还会继续追问,请回答一下你理解的双向数据绑定背后的原理是什么?那今天我们就一起探讨一下vue的背后的一些方式实现。所谓要实现双向数

    2022年10月10日
    3
  • 关于各种型号单片机delay函数不起作用问题的解决方法

    关于各种型号单片机delay函数不起作用问题的解决方法这里以单片机HT45F75为例://定义一个延时xms毫秒的延时函数voiddelay(unsignedintxms) //xms代表需要延时的毫秒数{   unsignedintx,y;   for(x=xms;x&gt;0;x–)           for(y=960/4;y&gt;0;y–)           {                     …

    2022年6月1日
    48

发表回复

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

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