2011-10-16 34 views
7

爲什麼構造ArrayAdapter(新View.OnKeyListener(){},整型,字符串[])在以下未定義我的編碼。此編碼用於在輸入字數超過3個字符時從SQLite獲取數據。但是,它顯示以下錯誤。爲什麼ArrayAdapter <String>構造(新View.OnKeyListener(){},整型,字符串[])是未定義

構造ArrayAdapter(新View.OnKeyListener(){},整型,字符串 [])是未定義

ed1 = (AutoCompleteTextView)findViewById(R.id.searchWord); 
ed1.setOnKeyListener(new View.OnKeyListener() 
{ 
    Integer count = 0; 
    String typeWord = ""; 
    public boolean onKey(View v, int keyCode, KeyEvent event) 
    {     
     if (KeyEvent.ACTION_DOWN == event.getAction()) { 
      if (keyCode != 67) { 
       count++; 
       char c = (char)event.getUnicodeChar(); 
       typeWord = typeWord + c; 
      } 
      else { 
       count--; 
      } 
      if (count > 2 && typeWord != "") {                    
       countries = getAutosuggestWord(typeWord); 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.autosuggest, countries); 
       ed1.setAdapter(adapter);        
      } 
     }      
     return false;      
    }    
}); 

回答

23

當您想引用內部類的封閉類時,您需要限定使用this。在你的代碼,如果封閉類是你的Activity子類(假設它被稱爲MyActivity),那麼你可以這樣寫:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyActivity.this, 
    R.layout.autosuggest, 
    countries); 
+2

哇..太棒了。你拯救了我的生命。 – ppshein

4

構造沒有限定,因爲thisView.OnKeyListener參考。改爲使用YourOuterClass.this

+0

不幸的是,沒有外部類。它在onCreate。 – ppshein

+1

@ppshein - 有一個外部類:你的活動類。 dtmilano的答案(像我的)是正確的,因爲你正在用'new View.OnKeyListener(){...}'創建一個匿名的內部類。在'{...}'裏面,'this'指的是匿名的內部類,而不是你的活動類。 –

+1

這就是我的意思,YourActivity.this。 –

0

關鍵字thisView.OnKeyListener類的當前實例。 ArrayAdapter的構造函數將當前上下文作爲第一個參數,它是您的外部類名稱,即View(如MyActivity)。您可以使用MyActivity.this而不是this

0

我知道這是可笑的晚,但我通常在這種情況下使用getActivity()。所以它看起來像這樣:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), R.layout.autosuggest, countries); 
ed1.setAdapter(adapter); 
+0

感謝您的清理 – DipDro420

相關問題