Android (5) ArrayAdapter 下拉式選單
用 ArrayAdapter 來建立一個可以下拉的選單。
1. 添加資源:
在 res/values/string.xml 中添加需要用到的字串及陣列:
<string name="spinner_prompt">"Select one"</string>
<string-array name="nameList">
<item>alice</item>
<item>bob</item>
<item>cat</item>
<item>eve</item>
</string-array>
2. 處理 Layout:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Spinner
android:id="@+id/sp_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="@string/spinner_prompt">
</Spinner>
</LinearLayout>
我們使用了預先定義好的資源 spinner_prompt。
3. 透過 ArrayAdapter 幫 Spinner 設定內容:
下面是一個簡單的 Spinner 範例:
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner sp_name = (Spinner)findViewById(R.id.sp_name);
ArrayAdapter nameListAdapter = ArrayAdapter.createFromResource(
MainActivity.this,
R.array.nameList,
android.R.layout.simple_spinner_dropdown_item);
sp_name.setAdapter(nameListAdapter);
}
}
我們使用 ArrayAdapter.createFromResource() 利用 Resource 產生一個 ArrayAdapter。
ArrayAdapter.createFromResource() 需要三個參數:
public static ArrayAdaptercreateFromResource ( Context context, int textArrayResId, int textViewResId)
- Context context: App 的環境。
- int textArrayResId: Array 的 Id。
- int textViewResId: View 的 Id。
4. 設定 Spinner 的 Listener:
上面的範例只有示範如何產生選單,選完的選項沒有連動到任何方法,下面的範例示範如何將選取連動。
在 MainActivity 中簡單定義一個 Listener,實做 onItemSelected(),選完會 Toast 一個簡單的訊息。
private class MySpinnerListener implements AdapterView.OnItemSelectedListener{
@Override
public void onItemSelected(AdapterView parent, View view, int position, long id) {
String[] nameList = getResources().getStringArray(R.array.nameList);
Toast.makeText(MainActivity.this, nameList[position], Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView parent) {
}
}
下面是完整的程式碼,我們把我們定義的 Listener 設給 Spinner:
package com.example.ben.androidtest;
import android.support.v7.app.AppCompatActivity;
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 MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner sp_name = (Spinner)findViewById(R.id.sp_name);
ArrayAdapter nameListAdapter = ArrayAdapter.createFromResource(
MainActivity.this,
R.array.nameList,
android.R.layout.simple_spinner_dropdown_item);
sp_name.setAdapter(nameListAdapter);
sp_name.setOnItemSelectedListener(new MySpinnerListener());
}
private class MySpinnerListener implements AdapterView.OnItemSelectedListener{
@Override
public void onItemSelected(AdapterView parent, View view, int position, long id) {
String[] nameList = getResources().getStringArray(R.array.nameList);
Toast.makeText(MainActivity.this, nameList[position], Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView parent) {
}
}
}
留言
張貼留言