一. 简单认识
Activity
package cn.lyj.android;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
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 AndroidUIActivity extends Activity {
protected int mPos;
protected String mSelection;
protected ArrayAdapter<CharSequence> mAdapter;
public static final int DEFAULT_POSITION = 2;
public static final String PREFERENCES_FILE = "SpinnerPrefs";
public static final String PROPERTY_DELIMITER = "=";
public static final String POSITION_KEY = "Position";
public static final String SELECTION_KEY = "Selection";
public static final String POSITION_MARKER = POSITION_KEY
+ PROPERTY_DELIMITER;
public static final String SELECTION_MARKER = SELECTION_KEY
+ PROPERTY_DELIMITER;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner) findViewById(R.id.Spinner01);
// 设置ArrayAdapter
this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,
android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(this.mAdapter);
// 选中触发事件,在窗口中央显示项目
OnItemSelectedListener spinnerListener = new myOnItemSelectedListener(
this, this.mAdapter);
spinner.setOnItemSelectedListener(spinnerListener);
}
/**
* 用户选中下拉列表中得一项
*/
public class myOnItemSelectedListener implements OnItemSelectedListener {
ArrayAdapter<CharSequence> mLocalAdapter;
Activity mLocalContext;
// 构造方法
public myOnItemSelectedListener(Activity c,
ArrayAdapter<CharSequence> ad) {
this.mLocalContext = c;
this.mLocalAdapter = ad;
}
//When the user selects an item in the spinner, this method is invoked by the callback chain
public void onItemSelected(AdapterView<?> parent, View v, int pos,
long row) {
//暂时没发现有什么用
//AndroidUIActivity.this.mPos = pos;
AndroidUIActivity.this.mSelection = parent.getItemAtPosition(pos).toString();
TextView resultText = (TextView) findViewById(R.id.SpinnerResult);
resultText.setText(AndroidUIActivity.this.mSelection);
}
//无用
public void onNothingSelected(AdapterView<?> parent) {
}
}
/*
* Restores the current state of the spinner (which item is selected, and the value
* of that item).
*/
@Override
public void onResume() {
super.onResume();
if (!readInstanceState(this))
setInitialState();
Spinner restoreSpinner = (Spinner) findViewById(R.id.Spinner01);
restoreSpinner.setSelection(getSpinnerPosition());
}
/**
* Read the previous state of the spinner from the preferences file
*/
public boolean readInstanceState(Context c) {
SharedPreferences p = c.getSharedPreferences(PREFERENCES_FILE,
MODE_WORLD_READABLE);
this.mPos = p.getInt(POSITION_KEY, AndroidUIActivity.DEFAULT_POSITION);
this.mSelection = p.getString(SELECTION_KEY, "");
return (p.contains(POSITION_KEY));
}
/*
*Store the current state of the spinner (which item is selected, and the value of that item).
*/
@Override
public void onPause() {
super.onPause();
if (!writeInstanceState(this)) {
Toast.makeText(this, "Failed to write state!", Toast.LENGTH_LONG)
.show();
}
}
/**
* Write the application's current state to a properties repository.
*/
public boolean writeInstanceState(Context c) {
SharedPreferences p = c.getSharedPreferences(
AndroidUIActivity.PREFERENCES_FILE, MODE_WORLD_READABLE);
SharedPreferences.Editor e = p.edit();
e.putInt(POSITION_KEY, this.mPos);
e.putString(SELECTION_KEY, this.mSelection);
return (e.commit());
}
/**
* Sets the initial state of the spinner when the application is first run.
*/
public void setInitialState() {
this.mPos = DEFAULT_POSITION;
}
public int getSpinnerPosition() {
return this.mPos;
}
public void setSpinnerPosition(int pos) {
this.mPos = pos;
}
public String getSpinnerSelection() {
return this.mSelection;
}
public void setSpinnerSelection(String selection) {
this.mSelection = selection;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Creates a Linear Layout View to contain the spinner
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!--
Creates a spinner widget called Spinner01, within the Linear Layout
The prompt text comes from the string "planet_prompt" in strings.xml
Spinner不支持android:drawSelectorOnTop此属性
-->
<Spinner
android:id="@+id/Spinner01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:prompt="@string/planet_prompt" >
</Spinner>
<!-- Creates a TextView called SpinnerResult, below the spinner.
-->
<TextView
android:id="@+id/SpinnerResult"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="Result"
android:textSize="10pt"
android:textStyle="bold" >
</TextView>
</LinearLayout>
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
The string named "app_name" defines the application's visible name.
The string array "Planets" defines an array of 9 strings. The application loads
this array into the spinner's array adapter.
The string "planet_prompt" defines the prompt for the result text box.
-->
<resources>
<string name="app_name">Spinner</string>
<string-array name="Planets">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
<item>Pluto</item>
</string-array>
<string name="planet_prompt">Select a planet</string>
</resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.lyj.android"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".AndroidUIActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
二. 运行结果
启动
点击菜单
选择Pluto