2015-12-10 17 views
5

SearchViewonQueryTextSubmitメソッドが2回処理されるのはなぜですか? 結果が1つ必要ですが、どうすればいいですか?SearchViewのonQueryTextSubmitがAndroid Javaで2回処理される

public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      if (query != null) 
       audioRequest(query); 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      return false; 
     } 
    }); 
    return true; 
} 

答えて

9

のように変更した後、あなたは2回実行取得からonQueryTextSubmitを防ぐために、次のコードを使用することができ、あなたのメソッドを呼び出そう:

searchView.clearFocus();

+0

を変更しませんありがとう、私はすでにそれをしましたが、私はそれについて書くことを忘れていました:) –

0

テキストは、この

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      if (newText != null) 
       audioRequest(newText); 
      return false; 
     } 
    }); 
+0

何が再び変化しない:( –

1

Iエミュレータのキーボードから入力すると2つの出力が生成されますが、エミュレータのキーパッドの検索ボタンをクリックすると1つの出力が作成されます。だから、私はあなたがこれについて心配するべきではないと思う。すべての携帯電話やタブレットで、このエラーは発生しない可能性があります。

ただし、searchView.clearFocus();ここでも働きます。同じ問題で苦労しているすべての人のために

1

、ここではドキュメントがonQueryTextSubmit(String query)方法hereについて言っているのです:

リスナーは にtrueを返すことにより、標準の動作をオーバーライドすることができ、それが提出扱っていることを示します要求。

だから、単にreturn falsereturn trueで置き換えます。

@Override 
public boolean onQueryTextSubmit(String query) { 
    if (query != null) 
     audioRequest(query); 
    return true; 
} 
0

が1つの以上の単語を検索したいですか?

searchView.setOnQueryTextListener(新しいSearchView.OnQueryTextListener(){ @OverrideパブリックブールonQueryTextSubmit(文字列クエリ) {falseを返す;}

 @Override 
     public boolean onQueryTextChange(String newText) { 


      newText = newText.toLowerCase(); 

      final ArrayList<DictObjectModel> filteredList = new ArrayList<DictObjectModel>(); 

      for (int i = 0; i < wordcombimelist.size(); i++) { 

       final String text = wordcombimelist.get(i).toLowerCase(); 
       if (text.contains(newText)) { 

        filteredList.add(new DictObjectModel(wordcombimelist.get(i),meancombimelist.get(i))); 
       } 
      } 
      adapter = new CustomAdapter(filteredList); 
      recyclerView.setAdapter(adapter); 


      return true; 
     } 
    }); 
関連する問題