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 ArrayAdapter createFromResource (
                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) {

        }
    }
}

留言

熱門文章