在開發android項目中,spinner控制項使用的還是比較多的。下面就來討論一下spinner的知識。以備以後自己忘記前來查閱。本節還涉及到ArrayAdatper的使用方法。
直接給定例子,離職中有詳細的介紹:
在layout中main.xml檔案的內容為:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/spinner"
android:text="spinner"
/>
</LinearLayout>
在layout中string.xml檔案的內容為:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, SpinnerActivity!</string>
<string name="app_name">SpinnerTest</string>
<string-array name="spinner">
<item>a</item>
<item>x</item>
<item>d</item>
<item>c</item>
<item>v</item>
<item>f</item>
</string-array>
</resources>
java代碼如下:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class SpinnerActivity extends Activity {
Spinner spinner = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
spinner = (Spinner) findViewById(R.id.spinner);
/**
* 通過createFromResource()方法建立ArrayAdapter對象
* 第一個參數是內容物件
* 第二個參數引用了string.xml檔案當中的數組,
* 第三個參數用來指明spinner的樣式,是一個布局id,該布局id由android系統提供,也可以替換自己定義的布局檔案
*/
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.spinner, android.R.layout.simple_spinner_item);
//設定spinner顯示的樣式,引用一個android系統提供的樣式,系統內建了比較多的樣式,大
//家可以選擇自己喜歡的樣式或客戶定製的樣式,當能也可以自己制定樣式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setPrompt("測試");
//設定spinner控制項的監聽器
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
//當使用者選定了一個條目時,就會調用該方法
/**
* 第一個參數:代表整個列表頁就是包含所有條目的列表
* 第二個參數:代表被選中的條目的view
* 第三個參數:位置
* 第四個參數:空間的id
*/
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
/**
* getItemAtPosition()
* 擷取相關的資料列表中的指定位置
*/
Toast.makeText(parent.getContext(),"The planet is "+ parent.getItemAtPosition(position).toString(),
Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
這樣就可以控制一個spinner控制項了。以上這個例子使用ArrayAdapter非常局限,很難做到動態添加資料。下面這個例子就是說明自己定義布局檔案,自己用一個集合添加資料。
要在layout裡面添加一個布局檔案item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
/>
</LinearLayout>
其他的和上面例子一樣;看java代碼:
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class SpinnerActivity extends Activity {
Spinner spinner = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
spinner = (Spinner) findViewById(R.id.spinner);
/**
* 通過createFromResource()方法建立ArrayAdapter對象
* 第一個參數是內容物件
* 第二個參數引用了string.xml檔案當中的數組,
* 第三個參數用來指明spinner的樣式,是一個布局id,該布局id由android系統提供,也可以替換自己定義的布局檔案
*/
//ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.spinner, android.R.layout.simple_spinner_item);
//設定spinner顯示的樣式,引用一個android系統提供的樣式,系統內建了比較多的樣式,大
//家可以選擇自己喜歡的樣式或客戶定製的樣式,當能也可以自己制定樣式
//adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
List<String> list = new ArrayList<String>();
list.add("wo");
list.add("ai");
list.add("ni");
/**
* 調用ArrayAdapter的建構函式建立一個ArrayAdapter對象
* 第一個參數指上下文
* 第二個參數指定了下拉式功能表中每一個條目的樣式
* 第三個參數指定了TextView空間的id
* 第四個參數要添加資料的集合,為整個列表提供資料
*/
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.item, R.id.textView, list);
spinner.setAdapter(adapter);
spinner.setPrompt("測試");
//設定spinner控制項的監聽器
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
//當使用者選定了一個條目時,就會調用該方法
/**
* 第一個參數:代表整個列表頁就是包含所有條目的列表
* 第二個參數:代表被選中的條目的view
* 第三個參數:位置
* 第四個參數:空間的id
*/
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
/**
* getItemAtPosition()
* 擷取相關的資料列表中的指定位置
*/
Toast.makeText(parent.getContext(),"The planet is "+ parent.getItemAtPosition(position).toString(),
Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
這樣就實現了再list中望列表中動態添加資料。