展会信息港展会大全

Android之旅八 ListView、TabHost、Spinner控件详细介绍
来源:互联网   发布日期:2015-11-26 13:27:08   浏览:1817次  

导读:本博客为大家介绍android中的相对比较复杂的控件,希望对大家能有所帮助,下面依次来看看吧!!一、ListView 我们使用ListView来显示两列,一列表示用户名,一列表示用户的I...

本博客为大家介绍android中的相对比较复杂的控件,希望对大家能有所帮助,下面依次来看看吧!!

一、ListView

我们使用ListView来显示两列,一列表示用户名,一列表示用户的IP地址

在main.xml中设置整体布局:

其中,必须要加上红色标志部分,用来表示ListView 的ID,否则系统启动会报错,其次,我们还得要有一个布局文件,它用来表示ListView中各列显示的布局,我这里取名为user.xml:

好了,接下来定义我们的Activity类,这个类需继承自ListActivity:

package com.test;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import android.app.ListActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.ListView;

import android.widget.SimpleAdapter;

public class ListViewActivity extends ListActivity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//创建一个list对象,为其中增加相应的信息

List> list = new ArrayList>();

HashMap map1 = new HashMap();

HashMap map2 = new HashMap();

HashMap map3 = new HashMap();

map1.put("user_name", "zhangsan");

map1.put("user_ip", "192.168.1.5");

map2.put("user_name", "lisi");

map2.put("user_ip", "192.168.1.6");

map3.put("user_name", "wangwu");

map3.put("user_ip", "192.168.1.7");

list.add(map1);

list.add(map2);

list.add(map3);

//表示ListView中的两列

SimpleAdapter listAdapter = new SimpleAdapter(this, list, R.layout.user,

new String[] { "user_name", "user_ip" }, new int[] {

R.id.user_name, R.id.user_ip });

this.setListAdapter(listAdapter);

}

//参数:ListView本身,被点击控件的对象,位置,id

@Override

protected void onListItemClick(ListView l, View v, int position, long id) {

super.onListItemClick(l, v, position, id);

System.out.println("id:"+id);

System.out.println("position:"+position);

}

}

注意SimpleAdapter中的参数介绍:1、当前对象 2、list数据,其中的键值要与user.xml中的各TextView中的id要一样3、定义存放内容的布局文件,上面我们已经提到了4、找寻HashMap中的键值,与HashMap中的键值相对应5、user.xml中布局文件的ID

onListItemClick是点击每一行所触发的事件,我们可以得到相应的信息!

需要统一的地方:HashMap中的键值、new String中字符数组、user.xml中控件ID要一致,这样我们的ListView页面就出来了!!

二、TabHost:就是分页卡,像我们手机中的已接来电、未接来电、全部通话等等

借用上面的ListView,我们使用TabHost,一个页面用来显示上面ListView中的信息,另一个页面用来显示hello字符串信息

把上面Listview中的布局文件、user.xml文件、以及ListActivity拷贝到项目中来,因为这些都需要用到,新建TabHost的布局文件tab.xml:

<frameLayout android:id="@android:id/tabcontent"

android:layout_width="fill_parent" android:layout_height="fill_parent"

android:padding="5dp">

</frameLayout>

注意:使用TabHost中的布局就必须按照TabHost里面相应的布局进行,否则会报错;接下来我们在Activity中 将ListView及文本加入到TabHost中:

package com.harder.xin;

import android.app.TabActivity;

import android.content.Intent;

import android.content.res.Resources;

import android.os.Bundle;

import android.widget.TabHost;

public class MainActivity extends TabActivity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.tab);

addTab();

}

/**

* 添加Tab

*/

private void addTab(){

//得到当前Activity的TabHost类,针对TabActivity的操作通常都由这个类完成

TabHost tabHost=getTabHost();

//创建TabHost.TabSpec,这个对象代表了一页

TabHost.TabSpec remoteTabSpec=tabHost.newTabSpec("list page");

Intent remoteIntent=new Intent();

//生成一个Inent对象,该对象指向一个Activity

remoteIntent.setClass(this, ListViewActivity.class);

//设置Tab里面的内容

remoteTabSpec.setContent(remoteIntent);

//设置Tab里的setIndicator理解为label和icon图标,这里使用的图标是系统里面自带的

Resources res=getResources();

remoteTabSpec.setIndicator("列表页面", res.getDrawable(android.R.drawable.stat_sys_download));

//将设置好的TabSpec对象添加到tabHost中

tabHost.addTab(remoteTabSpec);

//创建第二个tabHost

TabHost.TabSpec localTabSpec=tabHost.newTabSpec("text");

localTabSpec.setContent(R.id.hello);

localTabSpec.setIndicator("文本页面",res.getDrawable(android.R.drawable.stat_sys_upload));

tabHost.addTab(localTabSpec);

}

}

相应的注释在代码中可以知道,注意:在AndroidMainifest.xml中将TabActivity主界面设置为启动页面,设置好后,我们看到的效果:

三、Spinner:android选择框,相当于我们的下拉列表,让我们可以选择相应的数据

数据定义,我们可以在strings.xml中指定数据,也可以自己在代码中控制显示的数据,只是我们在strings.xml中定义的数据不灵活,而在代码中控制我们要显示的数据是我们经常用到的,这两种方式的区别是创建ArrayAdapter的方式不同,下面来看一下:

首先定义我们的布局文件:得在布局文件中加入Spinner标签:

通过strings.xml定义要显示的数据,在strings.xml中加入string-array数组,或者在values中添加array.xml文件也可以定义:

Hello World, MainActivity!Spinnerchangshazhuzhouxiangtanhengyanghuaihua

好了,定义好数据后,通过代码显示数据:

/**

* 通过在strings.xml中定义数据来创建Spinner

* 数据是死的,不灵活

*/

private void createSpinnerByStringXML(){

//通过createFromResource方法创建一个ArrayAdapter对象;

//第一个参数表示当前上下文对象

//第二个参数引用了在strings.xml中定义的String数组

//第三个参数用来指定Spinner的样式,是一个布局文件ID,该布局文件由android系统提供,也可以替换为自己的布局文件

ArrayAdapter adapter=ArrayAdapter.createFromResource

(this, R.array.planets_array, android.R.layout.simple_spinner_item);

//设置Spinner中每个条目的样式,同样是引用android系统提供的一个布局文件

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);

spinner.setPrompt("选择城市");

//选择每个条目后所触发的事件

spinner.setOnItemSelectedListener(new SpinnerClickListener());

}

然后在我们定义的Activity的onCreate方法中调用上面的方法,运行程序即可看到如下页面:

好了,接下来我们在程序中自己定义数据,我们还需要一个xml文件,用来表示每条数据显示的布局,上面是用的android里面自己提供的布局样式,我们这里定义为item.xml

接下来在程序中控制显示:

private void createSpinnerByAutoData(){

List list=new ArrayList();

list.add("beijing");

list.add("hunan");

list.add("shanghai");

list.add("tianjing");

/**

* 通过创建ArrayAdapter的构造函数创建ArrayAdapter对象

* 参数:第一个表示当前上下文对象

* 第二个表示指定下拉菜单中每一个条目的样式

* 第三个指定了TextView控件的ID,在item.xml中有一个TextView

* 第四个表示为整个列表提供数据,任何类型的数据都会调用其toString方法,将其显示在上面

*/

ArrayAdapter adapter=new ArrayAdapter

(this, R.layout.item, R.id.textViewId, list);

spinner.setAdapter(adapter);

spinner.setPrompt("选择省份");

spinner.setOnItemSelectedListener(new SpinnerClickListener());

}

解释的话基本在代码中我们就会知道了,只是通过strings.xml中创建数据,我们使用的ArrayAdapter是调用其createFromResource方法,而自定义数据我们使用的ArrayAdapter是通过new ArrayAdapter(),根据其参数去调用相应的信息,我们在点击某一项的时候,会产生一个点击事件:

//监听用户选择列表的动作

class SpinnerClickListener implements OnItemSelectedListener{

//点击某一项执行的方法

@Override

public void onItemSelected(AdapterView> adapterView, View view, int position,

long id) {

//得到当前选中条目的信息

String selectItem=adapterView.getItemAtPosition(position).toString();

System.out.println("你选择的是--->"+selectItem);

}

//没有点击执行的方法

@Override

public void onNothingSelected(AdapterView> arg0) {

System.out.println("Nothing selected");

}

}

解释见代码,通过自定义数据显示出来的界面:比较丑,因为我们没有在item.xml中为其设置相应的显示样式

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港