Activity-Spinner

2024-06-18 02:32
文章标签 activity spinner

本文主要是介绍Activity-Spinner,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.oschina.net/question/54100_33284

例子一:Spinner的基本实现方法

步骤一:编写Android XML文件

<LinearLayout …… > 
  <TextView android:id="@+id/spinner_label" …… /> 
   <!-- 经过我们的测试android:drawSelectorOnTop="true | false"不起作用,因此此参数可以不设置 --> 
   <Spinner android:id="@+id/spinner" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"  /> 
</LinearLayout>

步骤二:源代码

1)设置Spinner之中的元素内容,采用了ArrayAdapter来描述,并通过setApdater()来设置adapter

private String[] items=   {"lorem", "ipsum", "dolor", "sit", "amet",…. 
ArrayAdapter<String> aa = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,items); //第二个参数表示spinner没有展开前的UI类型 
spin.setAdapter(aa); //之前已经通过Spinner spin = (Spinner) findViewById(R.id.spinner);来获取spin对象 

2)设置spinner展开的方式,在上面,我们将通过设置ArrayAdapter的第二个参数,设置了spinner没有展开前的UI格式,simple_spinner_item是textview的label方式,而simple_spinner_dropdown_item这是点击圆圈选择方式。在这个例子中,我们将展开方式设置为点击圆圈选择,如图所示。关于格式,我们会在第二个例子中进行试验。

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

3)使用setOnItemSelectedListener()来设置Spinner的点击触发的callback函数,有onItemSelected和onNothingSelected两个接口需要具体给出。

public class SpinnerTest extends Activity implements OnItemSelectedListener{

   protected void onCreate(Bundle savedInstanceState) { 
        …… 
        spin.setOnItemSelectedListener(this); 
        … … 
    } 
    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,  long arg3) { 
        // TODO Auto-generated method stub 
        label.setText(items[arg2]); //label是我们设置的第一个TextView widget,arg2就是元素的pos需要 
        
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
        // TODO Auto-generated method stub 
        label.setText(""); 
    }       
}

例子二:Spinner的UI格式

步骤一:编写Android XML文件

在例子来自Android官方网站的tutorial的例子。我们下载SDK的文档中也带有,可以本地查看。这里我们希望item的元素内容设置都在XML中定义,方便修改以及多国语言版本的实现。

在strings.xml中:

<resources> 
    <string name="planet_prompt">太阳系行星:</string> 
    <string-array name="planets_arry"> 
        <item>Mercury</item> 
        <item>Venus</item> 
        <item>Earth</item> 
        <item>Mars</item> 
        <item>Jupiter</item> 
        <item>Saturn</item> 
        <item>Uranus</item> 
        <item>Neptune</item> 
    </string-array> 
</resources>

在layout的xml中:

<LinearLayout … > 
  <TextView … /> 
  <Spinner android:id="@+id/spinner4" 
   android:layout_width="fill_parent" 
   android:layout_height="wrap_content" 
   android:prompt="@string/planet_prompt" /> 
</LinearLayout>

在Spinner中,我们设置了prompt,根据@string在strings.xml中查找,prompt的内容为“太阳系行星:”在我们点击展开Spinner中,我们可以看到在最上面增加了提示,如上图所示。

步骤二:编写源代码

1)设置spinner的adapter,并导入数据,以及设置UI格式。

Spinner spin=(Spinner)findViewById(R.id.spinner4); 
//createFromResouce将返回ArrayAdapter<CharSequence>,具有三个参数: 
//第一个是conetxt,也就是application的环境,可以设置为this,也可以通过getContext()获取. 
//第二个参数是从data source中的array ID,也就是我们在strings中设置的ID号; 
//第三个参数是spinner未展开的UI格式 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.planets_arry,android.R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spin.setAdapter(adapter);

在ArrayApdater中我们设置了为展开的方式,android提供了两种格式,当然我们也可以通过Android XML文件进行设置,如同ListView一样,下图分别是设置android.R.layout.simple_spinner_item和 android.R.layout.simple_spinner_dropdown_item的显示,一般而言,我们都会显示前者。

 

如果我们不通过setDropDownViewResource进行设置,则展开的方式缺省同未展开的方式,否则必须进行设置,下图分别是设置 android.R.layout.simple_spinner_item和 android.R.layout.simple_spinner_dropdown_item。可以看出在下面左边的途中,展开和未展开的设置是不一样的。

 

2)设置回调函数

这里采用了一个类来描述回调处理

public class MyOnItemSelectedListener implements OnItemSelectedListener
    @Override 
    public void onItemSelected(AdapterView<?> parent, View arg1, int pos, long arg3){ 
        // 在这里我们复习一下Toast的用法  
        Toast.makeText(parent.getContext(), 
                                  "The planet is "+  parent.getItemAtPosition(pos).toString(), 
                                   Toast.LENGTH_LONG).show(); 
    }

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) {  
        //nothing to do 
    } 
}

在程序中使用spin.setOnItemSelectedListener(new MyOnItemSelectedListener());来设置回调对象即可。

例子三:自定义格式和数据

在上面的例子中,为展开和展开后的UI格式采用了Android自定义的格式,都可以自行定义。

ArrayAdapter adapter = new ArrayAdapter(this,R.layout.item,R.id.textView,list);

在上面的例子中,我们使用某个ArrayAdapter的构造函数,其中第一个参数是context,第二个参数指定下来菜单的每个条目的样式,第三个参数指定了在每个条目样式中用于显示数据的TextView的Id,第四个参数为列表的数据来源(可以是任何格式,toString()就是相应的赋值)

这篇关于Activity-Spinner的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071056

相关文章

LeakCanary测试app内存泄露+registerActivityLifecycleCallbacks管理Activity的生命周期

public class MyApplication extends Application {private String tag = "MyApplication";private static Stack<Activity> activityStack;//检测内存泄露private RefWatcher refWatcher;@Overridepublic void onCreate()

android studio怎么修改创建的Activity的模板?

1.找到android studio的安装目录,如下图,找到对应文件,修改EmptyActivity的模板。 2.修改成如下: 3.新建的EmptyActivity的默认代码如下:

Activity转屏重建之 Activity.onConfigurationChanged

偶尔也会遇到由于转屏引起的一些问题。 有些时候,并不希望由于转屏使得Activity取重建。 再如键盘消失后的重建。 下面以一个demo为例子,小小总结一下用法。 如果想在转屏后,屏幕上立马打印出当前处于什么横竖屏状态 1.都知道有个属性android:configChanges可以用来定义什么情况下可以使得Activity不会restart。 android:configC

查看当前正在运行的Activity列表

1、在终端中输入, 注意adb如果没有配置到系统环境变量里,则需要cd到它所在的文件夹下 “adb shell dumpsys activity” 2、出来的结果比较多,直接搜索"Running" ,找到 Running activities (most recent first):       TaskRecord{4069c020 #4 A shy.luo.ta

Activity被回收导致其内部的Fragment

方式一:   MainActivity重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到其随着MainActivity一起被回收的效果! 方式二: @Overrideprotected void onSaveInstanceState(Bundle outSta

OEM Activity Summary AAS 不记录后台进程 比如 rman

OEM中rman 备份认为是后台进程,所以在Activity Summary未显示 ,AAS 可以显示 去掉后台进程rman 一个也不显示!

Unable to instantiate activity

报的错, 04-25 20:56:13.629: E/Trace(1790): error opening trace file: No such file or directory (2) 04-25 20:56:13.653: E/AndroidRuntime(1790): FATAL EXCEPTION: main 04-25 20:56:13.653: E/AndroidRunt

Activity状态保存【onSaveInstanceState和onRestoreInstanceState】

Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法: 1. 基本作用:   Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()

Android - 总结Activity与Fragment打开的时候获取组件的大小

Activity中获取 组件大小        代码: @Overridepublic void onWindowFocusChanged(boolean hasFocus) {// TODO Auto-generated method stubsuper.onWindowFocusChanged(hasFocus);Log.d("TAG", "A-button1-->"+button1);L

Activity生命周期 与 重建

每一个Android应用程序在运行时,对于底层的Linux Kernel而言都是一个单独的进程,但是对于Android系统而言,因为局限于手机画面的大小与使用的考虑,不能把每一个运行中的应用程序窗口都显示出来。   所以通常手机系统的界面一次仅显示一个应用程序窗口,Android使用了Activity的概念来表示界面。   运行中的应用程序分为五大类,分别是:     前景模式