2013-01-07 21 views
0

工作,我有一個EditText,我用它來讓人們搜索數據庫。現在,我擁有了一切運行良好的功能,但是,當有人向EditText輸入內容時,我的ListView沒有按照我希望的方式更新。setOnKeyListener不EditText上

我希望它這樣,每當有人進入任何東西到它的EditText更新ListView控件。但是,當我輸入文本時,似乎沒有任何事情發生。

繼承人我的代碼:

@Override 
protected void onResume() { 
    searchText = (EditText)findViewById(R.id.search_text); 
    ImageView searchView = (ImageView)findViewById(R.id.button_exercises_search); 
    ImageView searchDoneView = (ImageView)findViewById(R.id.button_exercises_search_done); 

    if (isSearching) { 
     searchView.setVisibility(View.GONE); 
     searchDoneView.setVisibility(View.VISIBLE);   
     searchText.setVisibility(View.VISIBLE);   
    } 
    else { 
     searchView.setVisibility(View.VISIBLE); 
     searchDoneView.setVisibility(View.GONE);   
     searchText.setVisibility(View.GONE);   
    } 

    searchText.setOnKeyListener(new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      String query = searchText.getText().toString(); 

      if (query.length() > 0) { 
       cursor = datasource.fetchFilterExercises(dayDataID, query); 
      } 
      else { 
       cursor = datasource.fetchAddExercises(dayDataID); 
      } 
      dataAdapter.changeCursor(cursor); 

      return false; 
     } 
    }); 

    super.onResume(); 
} 

2個按鈕是正義的,單擊時,顯示/隱藏EditText上搜索圖標。我知道數據源正確地抓取了我想要的數據等。當我將文本輸入到EditText searchText中時,似乎沒有任何反應。我應該將其移入onCreate()嗎?要麼?

回答

4

你可以嘗試使用searchText.addTextChangedListener(...),並將所有你的邏輯是afterTextChanged(...)回調。根據文檔View.OnKeyListener()

註冊一個回調,當在這個視圖中按下硬件鍵時被調用。軟件輸入法中的按鍵通常不會觸發這個監聽器的方法。

希望這會幫助你!

+0

是的,是使用了錯誤的功能。謝謝。 – scarhand

+0

不客氣! – Evos

+0

你怎麼知道哪個鍵被按下,即如果yoiu按空格,刪除等? – jonney

0

因爲你正在使用ListView可能會使用適配器,所以如果那麼再加上這行 mAdapter.notifyDataSetChanged();

+0

因爲它使用了simplecursoradapter,所以listview通過更改遊標來更新。但謝謝你的嘗試。 – scarhand

1

你可以嘗試使用((EditText上) findViewById(R.id.editText))。addTextChangedListener(...),並將所有 你的邏輯

((的EditText)findViewById( R.id.editText)) .addTextChangedListener(新TextWatcher(){

    @Override 
        public void onTextChanged(CharSequence s, int start, 
          int before, int count) { 
     String query = searchText.getText().toString(); 

     if (query.length() > 0) { 
      cursor = datasource.fetchFilterExercises(dayDataID, query); 
     } 
     else { 
      cursor = datasource.fetchAddExercises(dayDataID); 
     } 
     dataAdapter.changeCursor(cursor); 

        } 

        @Override 
        public void beforeTextChanged(CharSequence s, int start, 
          int count, int after) { 
         // TODO Auto-generated method stub 

        } 

        @Override 
        public void afterTextChanged(Editable s) { 
         // TODO Auto-generated method stub 

        } 
       }); 

希望這會幫助你..