Android项目技术总结:项目中选择任务的联系人引出android的spinner的监听问题
web版本的項目中有這樣一個功能,動態添加聯系人,并且可以修改,如下圖:???
???????????????????????????????????????????????
可以由上面四圖明顯可以看出web上面的聯系人功能,最多可以有七個列表,每個列表選擇好了以后,又可以修改,如d圖。前面選擇好的聯系人,后面則不能選,因為沒有數據。??????????????????????
????
移植到android:
我在android上想要實現這樣一個功能,一個Activity中有一個spinner,當我點擊spinner其中的某一條的時候便彈出一個對話框。
于是我想到了setOnItemClickListener這個方法,測試發現有異常,一查源碼發現:A spinner does not support item click events. Calling this method will raise an exception. 所以覺得這條路可能是走不同了。
于是我便實現了這個方法:setOnItemSelectedListener,下面是我的關鍵代碼:
taskContactsSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
?? ??? ??? ?public void onItemSelected(AdapterView<?> arg0, View arg1,
?? ??? ??? ??? ??? ?int arg2, long arg3) {
?? ??? ??? ??? ??? ?AlertDialog.Builder builder = new AlertDialog.Builder(SpinnerTest.this);?? ?
?? ??? ??? ??? ??? ?builder.setTitle("Contacts");
?? ??? ??? ???????????????? builder.setItems(mItems, new DialogInterface.OnClickListener() {
?? ??? ??? ???????????????? public void onClick(DialogInterface dialog, int which) {
?? ??? ??? ????????????????????? //點擊后彈出窗口選擇了第幾項
?? ??? ??? ????????????????????? new AlertDialog.Builder(SpinnerTest.this)
?? ??? ??? ????????????????????? .setMessage("你選擇的id為" + which + " , " + mItems[which])
?? ??? ??? ????????????????????? .show();
?? ??? ??? ???????????????? }
?? ??? ??? ???????????? }).show();
?? ??? ??? ?}
?? ??? ??? ?public void onNothingSelected(AdapterView<?> arg0) {
?? ??? ??? ??? ?// TODO Auto-generated method stub
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?});
以上代碼中的onItemSelected方法里面的語句為彈出一個對話框。
測試發現:當我一進入Activity的時候,onItemSelected中的語句便自動執行了,而我要的效果是,只有當我點擊spinner中的某一條的時候,才能彈出該對話框。看到網上很多人說可以setSelect(0,false)可以防止一開始進入Activity便執行onItemSelected中的語句,表面上看效果是的,但實際上這樣做只是掩耳盜鈴,很多人可以發現,這樣做了以后打開spinner點擊第一條是沒有動作執行的,只有點擊其他的條數在反過來點擊第一條才會有反映,但是如果前后兩次點擊相同的條目的話,第二次的點擊也是無效的,那這是為什么呢?
帶著這個疑問,我又查看了源碼發現:onItemSelected這個方法是當spinner中的內容有改變的時候才會觸發,雖然我們表面上spinner的數據沒有什么變化,但是當我們點擊的條目的id變化時,其內部是看作spinner有變化的,關鍵代碼:
?if (mDataChanged) {
??????????? handleDataChanged();
??????? }
既然如此,便可以解釋上面的問題了,兩次點擊同樣的條目,是沒有任何動作會發生的。一開始進入Activity的時候,spinner中有了數據肯定也是變化了,所以便會執行onItemSelected中的語句,所以一開始便會彈出一個對話框。
后來我又想到加入boolean標志來判斷是否第一次進入activity等方法,發現效果都不能達到想象中的。
轉載于:https://www.cnblogs.com/duancanmeng/archive/2012/02/23/2524640.html
總結
以上是生活随笔為你收集整理的Android项目技术总结:项目中选择任务的联系人引出android的spinner的监听问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ae怎么做手写文字的动画? AE文本文字
- 下一篇: Win11下载软件被阻止怎么办 Win1