您的位置:首页 > 移动开发 > Android开发

Android 学习 笔记_12. Spinner的简单实使用

2013-03-26 01:22 645 查看
Android的控件有很多种,其中就有一个Spinner的控件,这个控件其实就是一个下拉显示列表。Spinner是位于 android.widget包下的,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器。Spinner是View类的一个子类。

现在我们通过两种方式来创建Spinner加强练习。一种是静态添加,一种是动态添加。静态好理解,就是直接在String.xml 中布局,动态创建一个Spinner,就是说用户每次想创建一个下拉列表,我们不能每次都在String.xml 中敲写代码,那么我们如何动态的创建ArrayAdapter呢?

下面是一个下拉框列表的小程序,程序主要是通过两个下拉列表实现的,第一个下拉列表是静态添加,第二个下拉列表是根据第一个列表所选的选项来动态添加下拉数据。具体的截图如下:





MainActivity.java

package zzl.spinner_01;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

private Spinner spinner = null;
private Spinner spinnerTwo = null;
private TextView textviewId = null;
String selected = null;
String selectedTwo = null;

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

spinner = (Spinner) findViewById(R.id.spinnerId);
spinnerTwo = (Spinner) findViewById(R.id.spinnerTwoId);
System.out.println("spinner" + spinner);
/*
* 1、固定Spinner: 通过createFromResource方法创建一个ArrayAdapter对象 参数1:上下文对象;
* 参数2:引用String.xml中的String数组 参数3: 指定spinner的样式
*/
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.array_spinner,
android.R.layout.simple_spinner_item);
/* set方法是来设置spinner中每个条目的样式 */
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setPrompt("Choose");

// 绑定监听器
spinner.setOnItemSelectedListener(new SpinnerSelectedListner());
}

class SpinnerSelectedListner implements OnItemSelectedListener {

@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
int position, long id) {
// TODO Auto-generated method stub
selected = adapterView.getItemAtPosition(position).toString();
showToast(0, "您选择了:" + selected);

/*
* 2、自动添加spinner
*/
ChooseTwo(selected);

}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
showToast(1, "您没有做选择!");
}

// 第二块的
public void ChooseTwo(CharSequence selected) {
List<String> list = new ArrayList<String>();
System.out.println("selected" + selected);
if (selected.equals("Guangdong")) {//比较。。
list.add("Raoping");
list.add("Guangzhou");
list.add("shantou");
System.out.println("selected" + selected);
} else
list.add("Nothing");
ArrayAdapter adapterTwo = new ArrayAdapter(MainActivity.this,
R.layout.spinner_item, R.id.textviewId, list);
spinnerTwo.setAdapter(adapterTwo);
spinnerTwo.setPrompt("ChooseTwo");
//spinnerTwo.setOnItemSelectedListener(new SpinnerSelectedListner());
}

public void showToast(int flag, CharSequence msg) {
if (flag == 1)
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT)
.show();
else if (flag == 0)
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT)
.show();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}


String.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="app_name">spinner_01</string>
<string name="hello_world">Hello world!</string>
<string-array name="array_spinner">
<item>Guangdong</item>
<item>Fujian</item>
<item>Beijing</item>
<item>Guangxi</item>
<item>Yunnan</item>
<item>Guizhou</item>
<item>Hunan</item>
<item>Taiwan</item>
<item>Heilongjian</item>
</string-array>

</resources>


spinner_item.xml

<TextView
android:id="@+id/textviewId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>


main.xml

<Spinner
android:id="@+id/spinnerId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<Spinner
android:id="@+id/spinnerTwoId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>


总结:

(1、一开始做第一个下拉列表的时候,出现了这样的问题:



而那时候第30行主要是spinner.setAdapter(adapter);这句代码,意思就是说传进来的adapter是空的,于是我加了System.out.println("spinner" + spinner);一句这样 的输出语句测试,发现spinner是空的,最后在String.xml中发现android:id="@+id/spinnerId" 写成了android:text="@+id/spinnerId" 。



(2、静态添加下拉列表的关键代码莫过于:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.array_spinner,android.R.layout.simple_spinner_item);
/* set方法是来设置spinner中每个条目的样式 */
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setPrompt("Choose");

首先通过createFromResource方法创建一个ArrayAdapter对象,然后设置spinner的样式,再把adapter对象传进spinner里面。

而动态添加则是:

List<String> list = new ArrayList<String>();
list.add("Raoping");
list.add("Guangzhou");
list.add("shantou");
ArrayAdapter adapterTwo = new ArrayAdapter(MainActivity.this,R.layout.spinner_item, R.id.textviewId, list);
spinnerTwo.setAdapter(adapterTwo);
spinnerTwo.setPrompt("ChooseTwo");

通过new一个List对象,然后再将数据添加到list中,最后,再new一个ArrayAdapter对象,再添加到Spinner中。

(3、将showToast函数独立开来。

(4、在将第一个列表所选的selected传进第二个列表的时候,有一个判断,就是if (selected.equals("Guangdong")),判断两个String的值是否相等,有一个地方需要注意,

就是

string1="aaa";
string2="aaa";
这两个字符串当然应该是相等的。
如果用表达式string1==string2,则该表达式的值为false
如果用表达式string1.equals(string2),则该表达式的值为true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐