●spinner=>選單清單
1.搭配陣列=>String[] 陣列物件{,,,};
2.ArrayAdapter<泛型> 物件=new ArrayAdapter<泛型>(this,android.R.layout.simple_spinner_item,陣列物件);
(=>收集資料/集合,很像ArrayList)
=>把陣列先放進來
=>只要元件名稱能變成陣列,就能用ArrayAdapter,可以支援很多元件,不限定於spinner
3.物件.setDropdownViewResourc(android.R.layout .simple_spinner .dropdown_item);
=>把陣列內容放進spinner中,這邊的物件是spinner物件(用dropdown的方式顯示)
4.spinner物件.setAdapter(adp物件);=>啟動spinner物件
 
●實作:設計一個下拉選單
public class MainActivity extends AppCompatActivity {
    Spinner spn;
    String [] x={"教育","金融","軍警"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         spn=(Spinner)findViewById(R.id.spn);
        ArrayAdapter<String> ada=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,x);
        ada.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spn.setAdapter(ada);
    }
}
**說明:
1.先抓id,設定陣列內容
2.陣列的類型要看清單內容是甚麼類型,因為大部分下拉選單都是用文字,所以這邊使用String
3.new要在onCreate做,一啟動就載入陣列資料
4.ArrayAdapter<String> =>這邊<>中的類型,要和陣列類型一樣,因為泛型,要收集此類型的資料
5. ArrayAdapter<String> ada=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,x);=>把陣列資料放進ada這個adpter物件,且要使用spinner物件
6. ada.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);=>指定這個物件要用spinner_dropdown元件
7. spn.setAdapter(ada);=>把ada顯示在ui的元件上
 
public class MainActivity extends AppCompatActivity {
Spinner spn;
String [] x={"教育","金融", "服務"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spn=(Spinner)findViewById(R.id.spn);
ArrayAdapter<String> ada=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,x);
ada.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spn.setAdapter(ada);
spn.setOnItemSelectedListener(L1);
}
Spinner.OnItemSelectedListener L1=new Spinner.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> adp, View view, int i, long l) {
String msg=adp.getSelectedItem().toString();
Toast t=Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT);
t.show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
 
}
};
}
**說明:
1.這邊要用 OnItemSelectedListener,一樣是匿名類別的作法,前面可加private也可不加
2.這個方法要override兩種, onItemSelected onNothingSelected,有選選項和沒選選項
3. onItemSelected(AdapterView<?> adp, View view, int i, long l)=>()中的 AdapterView<?> adp,因為內容是由Adapter產生給Spinner所以這邊是在等一個 AdapterView的物件進來,adp是一個可以自行決定的物件名稱,代表由上面ada把內容指定給它
4. adp.getSelectedItem().toString(); =>.getSelectedItem()是代表adp抓到的資料,因為是去R檔找的資料,所以會是int,這邊要把它轉成String
5.這邊只是把選單選取後要做甚麼功能完成,但當點下去要執行選單這個動作還沒寫,所以要再加上 spn.setOnItemSelectedListener(L1);
 
**也可在values/string.xml下做陣列,這樣不同業面都能共用這個下拉選單,用下列作法:
string.xml
<resources>
    <string name="app_name">Ex1</string>
    <string-array name="x2">
        <item>教育</item>
        <item>金融</item>
        <item>服務</item>
    </string-array>
</resources>
 
mainactivity.java
//ArrayAdapter<String> ada=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,x);
改成ArrayAdapter<CharSequence> ada=
ArrayAdapter.createFromResource(this,R.array.x2,android.R.layout.simple_spinner_item);
 
**說明:
因為這邊的 .createFromResource()是方法,不是建構式,而且是static,所以不需要new
 
 
*程式參考(gitHub):impelment of spinner
 
 
 
arrow
arrow
    創作者介紹
    創作者 muchone 的頭像
    muchone

    簡單。生活。享受

    muchone 發表在 痞客邦 留言(0) 人氣()