【android基礎學習之四】——基礎控制項CheckBox,Spinner,AutoCompleteTextView,DatePicker,TimePicker

來源:互聯網
上載者:User

聲明:學習的書籍《Android應用開發揭秘》,這裡記錄學習該書籍的日誌,引用的相關代碼與總結描述,沒有商業的用途,完全是自我學習的一個記錄,剛剛學習不可避免會出現很多問題,若是有錯誤還請大家多多批評。 

一、多項選擇(CheckBox)

多項選擇與單項選擇實作類別似,都是需要監聽每個控制項。

 

二、下拉式清單(Spinner)

執行個體分析:該執行個體主要實現一個下拉式清單血型的選擇。

 

【關注點】

1. 可選內容如何與下拉式清單關聯。

本例子使用了ArrayAdapter<String>

2. Adapter的理解與應用

API: An Adapter object acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making a View for each item in the data set.

         一個Adapter對象作為一個AdapterView和View底層資料之間的橋,提供對data Items的存取,同時負責針對每個Data如何渲染到對應的View中, 可以理解為MVC中的核心控制Controller。

 

執行個體關鍵源碼如下:

private static final String[]m_Countries= { "O型", "A型", "B型", "AB型", "其他" };private ArrayAdapter<String>adapter;m_Spinner = (Spinner) findViewById(R.id.Spinner1);        //將可選內容與ArrayAdapter串連    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, m_Countries);              //設定下拉式清單的風格adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);                //將adapter添加到m_Spinner中        m_Spinner.setAdapter(adapter);        //添加Spinner時間監聽        m_Spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {m_TextView.setText("你的血型是:" + m_Countries[arg2]);//設定顯示當前選擇的項arg0.setVisibility(View.VISIBLE);}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {}        });

執行個體效果:

    

【擴充點】

1.       AdapterView

Spinner是AdapterView的間接子類,

API:An AdapterView is a view whose children are determined by an Adapter.

作為一個View,其children通過一個Adapter來決定

關注具體的Adapter子類介面包括

android.widget.ListAdatper ,SpinnerAdapter  和WrapperListAdapter

抽象實作類別包括

android.widget.BaseAdapter,CursorAdapter ,ResourceCursorAdapter

常用的實作類別

android.widget.SimpleAdapter,

android.widget.ArrayAdapter

android.widget.SimpleCursorAdapter

HeaderViewListAdapter

 

2.  ArrayAdatper

   針對ArrayAdapter的模型可以為任意自訂的Object

  /***

     * Constructor

     * @param context The current context.

     * @param textViewResourceId The resource ID for a layout file containing a TextView to use when instantiating views.

     * @param objects The objects to represent in the ListView.

     */

    public ArrayAdapter(Context context, int textViewResourceId, List<T> objects) {

        init(context, textViewResourceId, 0, objects);

    }

比如:

 String[] gameCategory = new String[] { fiveChess, numberChess, linkChess,

   russiaBox };

 GameType[] gameCategory2 = { new GameType(fiveChess, "五子棋"),

   new GameType(numberChess, "九宮格"), new GameType(linkChess, "連連看"),

   new GameType(russiaBox, "俄羅斯方塊") };

 

一個為String數組,一個為GameType數組

 ArrayAdapter<String> adapter = new  ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, gameCategory);

ArrayAdapter<GameType> adapter = new ArrayAdapter<GameType>(this,android.R.layout.simple_spinner_item, gameCategory2);

 

針對不同的Adapter都可以綁定給Spinner

 

private Spinner gameTypeSP;

 

gameTypeSP.setAdapter(adapter);

 

該選擇對應的Spinner的選擇結果時,需要根據對應的物件類型擷取對應的值即可

 

Object gameTypeSelectItem = this.gameTypeSP.getSelectedItem();

   if (gameTypeSelectItem instanceof GameType) {

    if (gameTypeSelectItem != null) {

     this.seletedGameType = ((GameType) gameTypeSelectItem).getGameKey();

    } else {

     Log.d("GameCategory onClick", "gameTypeSelectItem is null");

    }

   }

 

如果是String對象,直接如下

Object gameTypeSelectItem = this.gameTypeSP.getSelectedItem().toString();

需要關注的是,GameType的toString() 方法,需要返回期望的值

 

三、自動提示控制項(AutoCompleteTextView、MultiAutoCompleteTextView)

該控制項可以實現在使用者輸入資料時,動態查詢已輸入的內容,類似於google,百度的動態查詢效果。

 

執行個體關鍵源碼:

private static final String[]autoString= new String[] { "a2", "abf", "abe", "abcde", "abc2", "abcd3", "abcde2", "abc2", "abcd2", "abcde2" };/關聯關鍵字    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,            android.R.layout.simple_dropdown_item_1line, autoString);        AutoCompleteTextView m_AutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.AutoCompleteTextView01);        //將adapter添加到AutoCompleteTextView中    m_AutoCompleteTextView.setAdapter(adapter);    ///////////////////    MultiAutoCompleteTextView mm_AutoCompleteTextView = (MultiAutoCompleteTextView) findViewById(R.id.MultiAutoCompleteTextView01);    //將adapter添加到AutoCompleteTextView中    mm_AutoCompleteTextView.setAdapter(adapter);    mm_AutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

 

關於這兩個控制項AutoCompleteTextView、MultiAutoCompleteTextView的之間的具體區別,可以參考:

Android控制項之AutoCompleteTextView、MultiAutoCompleteTextView探究

四、     日期和時間(DatePicker和TimePicker)

這兩個控制項的使用還是比較簡單的,在main.xml布局檔案中定義之後,通過java.util.Calendar類獲得系統時間,然後通過init方法將日期傳遞給DatePicker,並設定OnDateChangedListener來監聽日期改變。

同樣時間改變需要設定setOnTimeChangedListener監聽器即可。

 

關鍵源碼:

 

Calendar  c  = Calendar.getInstance();//擷取DatePicker對象m_DatePicker = (DatePicker) findViewById(R.id.DatePicker01);//將日曆初始化為當前系統時間,並設定其事件監聽m_DatePicker.init(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {@Overridepublic void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth){//當日期更改時,在這裡處理//c.set(year, monthOfYear, dayOfMonth);}});

 學習到P79頁

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.