20 UI_常用组件之 Spinner与适配器模式

UI_常用组件之 Spinner(下拉列表)与适配器模式

<Spinner

        android:id="@+id/spinner1"

        android:layout_width="142dp"

        android:layout_height="wrap_content" 

        android:entries="@array/spinner_data"

        android:spinnerMode="dropdown"/>


下拉列表的显示方式:

直接下拉列表       android:spinnerMode="dropdown"

弹出式下拉列表     android:spinnerMode="dialog"


静态添加数据的方式:(此方式适用于静态数据,写入之后就不能改变)

在main.xml中的Spinner写入:

android:entries="@array/spinner_data"

在strings.xml中写入:

<string-array name="spinner_data">

<item >陕西</item>

<item >河北</item>

<item >四川</item>

</string-array>

 

Adapter:(适配器模式)
       在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

BaseAdapter:

Adapter在Android应用程序中起着非常重要的作用,应用也非常广泛,它可看作是数据源和UI组件之间的桥梁,其中Adapter、数据和UI之间的关系,BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter,


动态添加数据的方式:

1、添加数据源1的数据:

代码:

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <!-- android:spinnerMode="dialog" 弹出式下拉列表-->
    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="142dp"
        android:layout_height="wrap_content"
        android:entries="@array/spinner_data"
        android:spinnerMode="dropdown"/>
</LinearLayout>

Test_spinnerActivity.java:

package test.spinner;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class Test_spinnerActivity extends Activity {
    //数据源1
    private String[] ss = new String[]{
            "北京",
            "上海",
            "深圳"
    };
    private List<String> list = new ArrayList<String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //数据源2
        list.add("java");
        list.add("c++");
        list.add("php");

        Spinner spinner=(Spinner)findViewById(R.id.spinner1);
        BaseAdapter adapter =new MyAdapter();
        spinner.setAdapter(adapter);
        //spinner-->adapter -->数据
    }

    private class MyAdapter extends BaseAdapter{
        public int getCount() {
            return ss.length;
        }
        public Object getItem(int arg0) {
            return null;
        }
        public long getItemId(int arg0) {
            return 0;
        }
        //通过count来调用getView,count是几就调用几次getView
        public View getView(int position, View converView, ViewGroup parent) {
            TextView textView = new TextView(Test_spinnerActivity.this);
            textView.setText(ss[position]);
            return textView;
        }
    }
}

运行结果:

2、添加数据源2的数据:

代码:

main.xml:

  和上面去数据源1的代码一样

Test_spinnerActivity.java:

(黄色的底色的是修改的代码)

package test.spinner;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class Test_spinnerActivity extends Activity {
    //数据源1
    private String[] ss = new String[]{
            "北京",
            "上海",
            "深圳"
    };
    private List<String> list = new ArrayList<String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //数据源2
        list.add("java");
        list.add("c++");
        list.add("php");

        Spinner spinner=(Spinner)findViewById(R.id.spinner1);
        BaseAdapter adapter =new MyAdapter();
        spinner.setAdapter(adapter);
        //spinner-->adapter -->数据
    }

    private class MyAdapter extends BaseAdapter{
        public int getCount() {
            return list.size();
        }
        public Object getItem(int arg0) {
            return null;
        }
        public long getItemId(int arg0) {
            return 0;
        }
        //通过count来调用getView,count是几就调用几次getView
        public View getView(int position, View converView, ViewGroup parent) {
            TextView textView = new TextView(Test_spinnerActivity.this);
            textView.setText(list.get(position));
            return textView;
        }
    }
}

运行结果:


ArrayAdapter:

<String>  adapter=

new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ss);

spinner.setAdapter(adapter);

ss指一个字符串数组

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dialog"/>

</LinearLayout>

Test_spinnerActivity.java:

package test.spinner02;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class Test_spinner02Activity extends Activity {

    private String[] ss = new String[]{
            "北京",
            "上海",
            "深圳"
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Spinner spinner=(Spinner)findViewById(R.id.spinner1);
        ArrayAdapter<String> adapter =
                new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ss);

        spinner.setAdapter(adapter);
    }
}

运行结果:


Spinner的监听器:

main.xml:

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <!-- android:spinnerMode="dialog" 弹出式下拉列表-->
    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="142dp"
        android:layout_height="wrap_content"
        android:entries="@array/spinner_data"
        android:spinnerMode="dropdown"/>
</LinearLayout>

Test_spinnerActivity.java:

package test.spinner;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class Test_spinnerActivity extends Activity {
    //数据源1
    private String[] ss = new String[]{
            "北京",
            "上海",
            "深圳"
    };
    private List<String> list = new ArrayList<String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //数据源2
        list.add("java");
        list.add("c++");
        list.add("php");

        Spinner spinner=(Spinner)findViewById(R.id.spinner1);
        BaseAdapter adapter =new MyAdapter();
        spinner.setAdapter(adapter);

        spinner.setOnItemClickListener(new OnItemClickListener(){

            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                //position 被选中的item,相对应的数组索引
                Toast.makeText(Test_spinnerActivity.this, list.get(position), 0).show();

            }
            public void onNothingSelected(AdapterView<?> arg0){

            }

        });
        //spinner-->adapter -->数据
    }

    private class MyAdapter extends BaseAdapter{
        public int getCount() {
            return list.size();
        }
        public Object getItem(int arg0) {
            return null;
        }
        public long getItemId(int arg0) {
            return 0;
        }
        //通过count来调用getView,count是几就调用几次getView
        public View getView(int position, View converView, ViewGroup parent) {
            TextView textView = new TextView(Test_spinnerActivity.this);
            textView.setText(list.get(position));
            return textView;
        }
    }
}

运行结果:

时间: 2024-10-16 23:36:39

20 UI_常用组件之 Spinner与适配器模式的相关文章

android常用组件之Spinner

Spinner是下拉列表框,用户可以通过该控件从所列item中进行选择,还可以触发item的监听事件. 该实例通过ArrayAdapter类创建了含有30个item的下拉列表,当用户从所列的item中进行选择后,会弹出一个消息框,提示用户所选条目.注意spinner条目监听方法是setOnItemSelectedListener(),而不是setOnItemClickListener(),如果使用setOnItemClickListener()方法会出现秒退现象. 首先是布局文件,添加一个Spi

android基础(5):常用组件1

常用组件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 文本框 --> <Text

EasyUI常用组件(基础)

---------------------------------------------------------------------------------------------------------------[版权申明:本文系作者原创,转载请注明出处]文章出处:http://blog.csdn.net/sdksdk0/article/details/51914553作者:朱培    ID:sdksdk0----------------------------------------

java基础 常用组件

几个常用组件: 在图形用户界面编程中,我们常常会提供用户登陆界面,比如登陆到会员管理系统,登陆到工资管理系统,仓库管理系统等,如下图我们就会用到: 1. 文本框(JTextField) 2. 密码框(JPasswordField) 3. 便签(JLable) example code: 1 package demo7; 2 import java.awt.*; 3 4 import javax.swing.*; 5 6 /* 7 * 多种布局管理器 8 * */ 9 public class d

part11-2 Python图形界面编程(Tkinter常用组件、对话框(Dialog)、菜单、Canvas绘图)

五. Tkinter 常用组件 Tkinter 各组件的详细用法还需要掌握,也就是掌握各个“积木块”的的详细功能. 1. 使用 ttk 组件 在前面直接使用的 tkinter 模块下的 GUI 组件看上去并不美观.为此 Tkinter 引了一个 ttk 组件作为补充,并使用功能更强大的 Combobox 取代原来的 Listbox,且新增了 LabeledScale(带标签的Scale).Notebook(多文档窗口).Progressbar(进度条).Treeview(树)等组件. ttk 是

JQuery EasyUI的常用组件

jQuery EasyUI 是一个基于 jQuery 的框架,集成了各种用户界面插件,该框架提供了创建网页所需的一切,帮助您轻松建立站点. 注:本次介绍的JQuery EasyUI版本为1.5版. 一.表单 form提供了各种方法来操作执行表单字段,比如:ajax提交, load, clear等等.当提交表单的时候可以调用validate方法检查表单是否有效. 用法: 使用form标签创建 <form id="ff" method="post"> <

Docker生态系统系列之一:常用组件介绍

[编者的话]本篇文章是介绍Docker生态系统的第一篇,不仅从概念上介绍了容器化.服务发现和全局配置存储.网络工具.调度.集群管理和编排这几部分内容,而且配以清晰易懂的例子进行讲解说明,非常值得读者称赞.Docker是现在使用最多的容器化软件.与其它已经存在的容器化系统相比,Docker可以更加简单的创建和管理容器,并与其它开源软件集成. 简介 容器化是一个以可移植和可预测的方式来部署分布式应用的过程,它会将应用组件以及依赖打包为一个标准.独立.轻量的环境,这个环境其实就是容器.现在许多公司都乐

(五) kendo UI view除表单外的常用组件

<div data-role="view" id="id" data-title="标题"></div> ================================================= 1.可以有很多个view(页),但每次只显示一个,通过 href=#id切换到当前页 2.与layout不同,layout通常用于多个view里面的固定层:可以多个,但每次显示也只是一个可以在view里通过data-la

20个常用Linux性能监控工具/命令

20个常用Linux性能监控工具/命令 对于 Linux/Unix 系统管理员非常有用的并且最常用的20个命令行系统监视工具.这些命令可以在所有版本的 Linux 下使用去监控和查找系统性能的实际原因.这些监控命令足够你选择适合你的监控场景. 1.top — Linux 系统进程监控 top 命令是性能监控程序,它可以在很多 Linux/Unix 版本下使用,并且它也是 Linux 系统管理员经常使用的监控系统性能的工具.Top 命令可以定期显示所有正在运行和实际运行并且更新到列表中,它显示出