2012-01-18 128 views
0

我有一個相當大的字符串數組與大量的字符串(顯然),我想在頂部放一個搜索欄。 這個字符串數組出現在列表視圖中。我希望能夠搜索列表中的某個字符串,然後隱藏與我的搜索不匹配的結果,並僅顯示與我搜索的內容相匹配的項目。搜索android中的字符串數組

我只是不知道如何設置代碼來搜索我的字符串數組。

代碼爲ListView

Resources res = getResources(); 
    ListView listView=(ListView)findViewById(R.id.list); 
    final String[] ids = res.getStringArray(R.array.idchart_array); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.test_list_item,ids); 
    listView.setAdapter(adapter); 

我的搜索代碼:

final EditText searchField = (EditText) findViewById(R.id.srcBox); 
Button searchButton = (Button) findViewById(R.id.srcBtn); 
searchButton.setOnClickListener(new View.OnClickListener() { 
public void onClick(View view) { 
for (String s : ids) { 
if (searchField.getText().toString().contains(s)) { 
} 
} 
} 
}); 

回答

0

簡單(未優化)的方式:

你的ListView代碼


使用ArrayList而不是數組,因爲你不能將它添加到一個ArrayAdapter後修改數組

ListView listView=(ListView)findViewById(R.id.list); 
     final String[] ids = res.getStringArray(R.array.idchart_array); 
     ArrayList<String> idList = Arrays.asList(ids); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.test_list_item,idList); 
    listView.setAdapter(adapter); 

搜索代碼

List<String> foundStrings = new ArrayList<String>(); 

     for(String s : ids){ 
      if(s.contains(searchField.getText().toString())){ 
       foundStrings.add(s); 
      } 
     } 

     idList.clear(); 
     idList.addAll(foundStrings); 
     adapter.notifyDataSetChanged(); 
+0

嗯...我試過,但沒有奏效,我用你的部分替換了我的for循環。 – BoinQ

+0

另外我不得不導入一些不是機器人的庫,所以即時通訊想知道你寫的是android兼容 – BoinQ

+0

我寫的是純java和android上的作品。是的,你必須導入java.util.List和java.util.ArrayList,但你的IDE應該爲你做這個 – Henry