因為想做一個頁面載入一些數據測試速度,順道就學習Spinner 和 Progress Bar
學習Spinner (下拉式選單) 跟Ravi Tamada的教程,很清晰就算是英文渣渣也能看明白~(因為小吉的英文是非常差~我可以看懂一般人都能的~)
他分了三個程度的教學: 基本上跟這三個教程就了解新手菜鳥需要知道的思路,spinner只是一個引路的~
第一層: 基本spinner用法
http://www.androidhive.info/2012/04/android-spinner-dropdown-example/
第二層: spinner 加載本地數據
http://www.androidhive.info/2012/06/android-populating-spinner-data-from-sqlite-database/
第三層: spinner 加載網絡數據(會教你AsyncTask的)
http://www.androidhive.info/2013/12/android-populating-spinner-data-from-mysql-database/
嗯~反正我跟著這三個教程敲了一遍都沒踫上什麼困難~如果你是渣渣,發現敲了一遍運行後,介面不一樣~不用擔心~那只是theme的問題~在AndroidManifest.xml搞一下就ok~
但仔細的用一下~Hey~還是有奇怪的地方!!!!!首先Spinner的item上是加了監聽器,每當觸發就用Toast說明你選哪項。
可是每次start activity和動態加載數據到Spinner時就會觸發spinner的onclike listener!!!Toast在非點擊的情況下還是會彈出來!
重點它不涉及focus的問題~不是失焦就可以解決~在stackoverflow搜了搜,得了一個這是Spinner硬傷的回應~所以還是需要手動處理一下。
另外就是Spinner沒有方法設置第一個子項做類似html的placeholder~小吉搜過其他人的做法~感覺都弄的複雜=_= 我就自己來個土炮方法解決它~
加載數據時,人手把第一項硬加成文字提示內容,再載入實際數據:
labels = new ArrayList<String>();
labels.add("---Select Item---"); //手動硬加
// Query all labels form database
labels.addAll(db.getAllLabels()); //載入真實數據
當點擊spinner item時的處理:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
if (isSpinnerFirst) {
// Avoid calling during initial 利用boolean做flag判斷是否第一次載入作無視
isSpinnerFirst = false;
return;
} else {
// Ignore default Item 位置0的子項定為提示文字內容 不作反應
if (position != 0) {
// On selecting a spinner item
String label = parent.getItemAtPosition(position).toString();
// Showing selected spinner item
Toast.makeText(parent.getContext(), "You selected: " + label,
Toast.LENGTH_LONG).show();
}
}
}
的確方法是粗暴,不過好像直接解決了。。。。如果大神們有更簡單直接的方法請教小吉一下~其實也有大神教直接不用spinner@_@"
記到這裡已經很困。。。。但還有Progress Bar -----------50%------------
Progress Bar就是配合AsyncTask來計算出來,
透過onProgressUpdate去更新進度條,在doInBackground工作時計算進度~
當doInBackground儲存10000條記錄進數據庫時,計算出總工作量完成度(單位%),再傳onProgressUpdate更新
int count = 10000;
for (int i = 0; i < count; i++) {
<span style="white-space:pre"> </span>db.insertLabel(params[0]);
<span style="white-space:pre"> </span>// publishing the progress...
<span style="white-space:pre"> </span>publishProgress((int) ((i / (float) count) * 100));
}
一條最基本的Progress Bar,就會出現了~
如果不喜歡~想浪一點~花巧一點就讀翔哥的教學了:
http://blog.csdn.net/lmj623565791/article/details/43371299