AutoCompleteTextView setOnItemSelectedListener 无效

来源:互联网 发布:国际网络交易平台 编辑:程序博客网 时间:2024/06/02 02:13

Android源码库里面,这个类的 OnItemSelectedListener事件没有做处理!

所以在使用这个类时,OnItemClickListener有效果,而OnItemSelectedListener没有效果的!

解决方法:利用反射机制,进行设置;

代码如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  *  
  3.  */  
  4. package com.telecom.surfing.tvcn.view;  
  5.   
  6.   
  7. import java.lang.reflect.Field;  
  8.   
  9. import android.content.Context;  
  10. import android.util.AttributeSet;  
  11. import android.util.Log;  
  12. import android.view.KeyEvent;  
  13. import android.view.View;  
  14. import android.view.inputmethod.InputMethodManager;  
  15. import android.widget.AdapterView;  
  16. import android.widget.ListPopupWindow;  
  17.   
  18. /** 
  19.  * 从写了 onKeyPreIme(),back时,只隐藏软键盘; 
  20.  * 新增了OnItemSelectedListener处理,Android默认没有做该方法的回调处理 
  21.  * 
  22.  */  
  23. public class AutoCompleteTextView extends android.widget.AutoCompleteTextView{  
  24.   
  25.     private AdapterView.OnItemSelectedListener onItemSelectedListener=null;  
  26.   
  27.     /** 
  28.      * @param context 
  29.      * @param attrs 
  30.      */  
  31.     public AutoCompleteTextView(Context context, AttributeSet attrs) {  
  32.         super(context, attrs);  
  33.         initOnItemSelectedLister();  
  34.     }  
  35.   
  36.     /** 
  37.      * @param context 
  38.      */  
  39.     public AutoCompleteTextView(Context context) {  
  40.         super(context);  
  41.         initOnItemSelectedLister();  
  42.     }  
  43.   
  44.     /** 
  45.      * @param context 
  46.      * @param attrs 
  47.      * @param defStyle 
  48.      */  
  49.     public AutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {  
  50.         super(context, attrs, defStyle);  
  51.         initOnItemSelectedLister();  
  52.     }  
  53.       
  54.     /* (non-Javadoc) 
  55.      * @see android.widget.AutoCompleteTextView#onKeyPreIme(int, android.view.KeyEvent) 
  56.      */  
  57.     @Override  
  58.     public boolean onKeyPreIme(int keyCode, KeyEvent event) {  
  59.         Log.d("KEy""KEy->AutoCompleteTextView onKeyPreIme,keycode="+keyCode);  
  60.         InputMethodManager imm = (InputMethodManager)this.getContext().getSystemService(this.getContext().INPUT_METHOD_SERVICE);  
  61.         if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction()== android.view.KeyEvent.ACTION_UP){//当软键盘显示时,按back按钮时,只隐藏软键盘;  
  62.               
  63.             if(imm.hideSoftInputFromWindow(this.getWindowToken(), 0)){  
  64.                 //imm.showSoftInput(textView,0);  
  65.                 return true;  
  66.             }  
  67.         }  
  68.         return super.onKeyPreIme(keyCode, event);  
  69.     }  
  70.       
  71.     private void initOnItemSelectedLister(){  
  72.         try {  
  73.             Field mPopuoField = AutoCompleteTextView.class.getSuperclass().getDeclaredField("mPopup");  
  74.             mPopuoField.setAccessible(true);  
  75.             ListPopupWindow mPopup = (ListPopupWindow) mPopuoField.get(this);  
  76.             mPopup.setOnItemSelectedListener(new PopWindOnItemSelectedListener());  
  77.             mPopuoField.setAccessible(false);  
  78.         } catch (NoSuchFieldException e) {  
  79.             e.printStackTrace();  
  80.         } catch (IllegalAccessException e) {  
  81.             e.printStackTrace();  
  82.         }  
  83.     }  
  84.     class PopWindOnItemSelectedListener implements AdapterView.OnItemSelectedListener{  
  85.   
  86.         /* (non-Javadoc) 
  87.          * @see android.widget.AdapterView.OnItemSelectedListener#onItemSelected(android.widget.AdapterView, android.view.View, int, long) 
  88.          */  
  89.         @Override  
  90.         public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {  
  91.             if(onItemSelectedListener!=null){  
  92.                 onItemSelectedListener.onItemSelected(arg0, arg1, arg2, arg3);  
  93.             }  
  94.         }  
  95.   
  96.         /* (non-Javadoc) 
  97.          * @see android.widget.AdapterView.OnItemSelectedListener#onNothingSelected(android.widget.AdapterView) 
  98.          */  
  99.         @Override  
  100.         public void onNothingSelected(AdapterView<?> arg0) {  
  101.             if(onItemSelectedListener!=null){  
  102.                 onItemSelectedListener.onNothingSelected(arg0);  
  103.             }  
  104.         }  
  105.     }  
  106.   
  107.     /** 
  108.      * @return the onItemSelectedListener 
  109.      */  
  110.     public AdapterView.OnItemSelectedListener getOnItemSelectedListener() {  
  111.         return onItemSelectedListener;  
  112.     }  
  113.   
  114.     /** 
  115.      * @param onItemSelectedListener the onItemSelectedListener to set 
  116.      */  
  117.     public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener onItemSelectedListener) {  
  118.         this.onItemSelectedListener = onItemSelectedListener;  
  119.     }  
  120.   
  121.     /* (non-Javadoc) 
  122.      * @see android.widget.AutoCompleteTextView#performFiltering(java.lang.CharSequence, int) 
  123.      */  
  124.     @Override  
  125.     protected void performFiltering(CharSequence text, int keyCode) {  
  126.         //重写该方法后,输入字符时,就不会过滤;  
  127. //      super.performFiltering(text, keyCode);  
  128.     }  
  129.       
  130. }  
0 0
原创粉丝点击