在android上搜索arraylist中的部分单词

时间:2012-01-29 00:13:31

标签: java android listview search partial

我在搜索单词的一部分时遇到很多问题,然后让它在之后找到完整的结果。

就像我正在搜索“droid”一样,它通过我的列表查找包含“droid”的任何内容,如果你看下面我的arraylist它应该找到“Android”

Arraylist代码:

private List<String> getModel() {
    List<String> list = new ArrayList<String>();
    list.add("Linux");
    list.add("Windows7");
    list.add("Suse");
    list.add("Eclipse");
    list.add("Ubuntu");
    list.add("Solaris");
    list.add("Android");
    list.add("iPhone");
    return list;
}

以下是我的其余代码:

public class idchart extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.idchart);        

    /*Resources res = getResources();        
    ListView listView=(ListView)findViewById(R.id.list);*/


    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
            android.R.layout.simple_list_item_1, 
            android.R.id.text1,
            getModel());
    setListAdapter(adapter);


    EditText filterEditText = (EditText) findViewById(R.id.srcBox);
    filterEditText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            adapter.getFilter().filter(s.toString());
        }

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

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

 }

1 个答案:

答案 0 :(得分:0)

正如所建议的那样,使用Regex,据我所知,您必须迭代列表并尝试匹配每个条目。

如果要避免迭代,可以对单词的每个字符(如NGram)使用倒排索引方法。如果要从用户发送的内容开始搜索文本,可以使用Java Map(Commons MultiMap)进行搜索。如果你想通过“droid”搜索,那么你必须索引每个字符的位置并检索相对结果。如果没有像Lucene这样的图书馆,我不建议这样做。