2011-10-16 9 views
7

なぜ次のときにコンストラクタArrayAdapter(new View.OnKeyListener(){}、int、String [])が未定義ですか?私のコーディング。このコーディングは、word countが3文字以上である場合にSQLiteからデータを取得するためのコーディングです。しかし、それは次のエラーを表示しています。なぜコンストラクタArrayAdapter <String>(新しいView.OnKeyListener(){}、int、String [])は未定義です

コンストラクタArrayAdapter(新しいView.OnKeyListenerは、(){}、INT、 文字列[])thisView.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の使用を修飾する必要があります。外側のクラスは、あなたの活動のサブクラスであれば、あなたのコードでは、あなたが書くでしょう、(のは、それがMyActivityと呼ばれるとしましょう):

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

うわー..いいですよ。あなたは私の人生を救う。 – ppshein

4

に定義されていません。代わりにYourOuterClass.thisを使用してください。

+0

残念ながら、外部クラスはありません。それはonCreateにあります。 – ppshein

+1

@ppshein - あなたのアクティビティクラスである外部クラスがあります。あなたが 'new View.OnKeyListener(){...}'で匿名の内部クラスを作成しているので、dtmilanoの答え(私のような)は正しいです。 '{...}'の中で、 'this'はあなたのアクティビティクラスではなく、匿名の内部クラスを参照します。 –

+1

それは私が言ったことです、あなたの活動。これ。 –

0

キーワードthisポイントView.OnKeyListenerクラスの現在のインスタンスに。 ArrayAdapterのコンストラクタは、現在のコンテキストを外部クラス名である最初のパラメータ、つまりView(MyActivity)としてをとります。

thisの代わりにMyActivity.thisを使用してください。

0

私はこれがばかげて遅いことを知っていますが、私は通常この状況でgetActivity()を使用します。したがって、次のようになります。

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

ここでの清掃をありがとう – DipDro420

関連する問題