Spinner + AsyncTask + Progress Bar 一次過搞定

因為想做一個頁面載入一些數據測試速度,順道就學習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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值