2013-10-23 38 views
0

嗨,大家好我在我的列表視圖中實現edittext來過濾項目。我按照this的例子,但沒有發生。它不工作,當我試圖篩選它不這樣做我想要的。這是我的EditText上的部分代碼:在列表視圖中的EditText搜索項不起作用

ListView lv = (ListView) findViewById(android.R.id.list); 
     lv.setTextFilterEnabled(true); 
     lv.setAdapter(listadaptor); 
     inputSearch.addTextChangedListener(new TextWatcher() { 

      public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
       // When user changed the Text 
       MainActivity.this.listadaptor.getFilter().filter(cs); 
      } 

      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
        int arg3) { 
       // TODO Auto-generated method stub 

      } 

      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub       
      } 
     }); 
    }; 

我的列表視圖是顯示安裝在設備中的所有應用程序的列表..我有這個加載列表:

private class LoadApplications extends AsyncTask<Void, Void, Void> { 

public ProgressDialog progress = null; 

@Override 
protected Void doInBackground(Void... params) { 
    applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); 
    listadaptor = new ApplicationAdapter(MainActivity.this,R.layout.snippet_list_row, applist); 

    return null; 
} 

@Override 
protected void onCancelled() { 
    super.onCancelled(); 
} 

protected void onDestroy() { 
    if(progress!=null) 
     if(progress.isShowing()){ 
     progress.dismiss(); 
     } 

} 

@Override 
protected void onPostExecute(Void result) { 
    setListAdapter(listadaptor); 
    progress.dismiss(); 
    super.onPostExecute(result); 
} 

@Override 
protected void onPreExecute() { 
    progress = ProgressDialog.show(MainActivity.this, null, 
      "Caricamento applicazioni in corso..."); 
    super.onPreExecute(); 
} 

@Override 
protected void onProgressUpdate(Void... values) { 
    super.onProgressUpdate(values); 
} 

}

所以listadaptor是我的適配器..有人能幫助我嗎?由於

+0

參考這一個... http://androidsearchfilterlistview.blogspot.in/ – Aravin

+0

你認爲我的代碼錯了嗎? –

+0

你的建議是有點不同..該列表視圖假設你在這裏添加項目'私人無效setViewStub()'所以我不知道如何我可以適應我的代碼這個.. –

回答

0

試試這個..

 ArrayList<String> type_name_copy = new ArrayList<String>(); 
     inputSearch.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
     } 

     @Override 
     public void afterTextChanged(Editable theWatchedText) { 
      ArrayList<String> type_name_filter = new ArrayList<String>(); 

      String text = theWatchedText.toString(); 

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

       if ((array.get(i).toLowerCase()).contains(text 
         .toLowerCase())) { 
        type_name_filter.add(array.get(i)); 

       } 
      } 

      type_name_copy = type_name_filter; 

      listUpdate(type_name_copy); 
     } 
    }); 

} 

public void listUpdate(ArrayList<String> data) { 
    lv.setAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, data)); 

} 
} 
+0

'type_name_copy'? –

0

我建議你使用AutocompleteTextView這是EDITTEXT與Android中內置的搜索功能。