0

现在我正在使用edittext和listview在android中制作一个程序。我想使用上面的edittext搜索listview项目。将数据填充到列表视图后,当用户在edittext中键入文本时,listview将滚动到以该文本开始的位置。例如:我有项目:苹果,应用程序,书籍,男孩,汽车,猫,现金.....当我在edittext中键入b然后listview将滚动到书。我想使用listview.setSelection(position),但我不知道如何从我的edittext搜索中获得位置。我希望每个人都可以帮助我。感谢进步!Android Listview从edittext搜索

+0

我想你正在使用textwatcher ..要么你维护一个单独的arraylist过滤列表或比较id的内容 – Carbon

回答

0

您可以在以下步骤中执行此操作。

  1. 检查输入的单词是否在您的列表视图中可用。
  2. 如果是,则分别在数组列表或您的列表视图中获取该单词的id或位置。
  3. 然后将选择设置为检索的ID。

如果你仍然无法得到ID,然后在认罪后您使用的字符串数组的自定义阵列适配器

Sol的代码:

在你的情况下,它也能像

这代码应该在你的oncreate或无论你在哪里启动你的列表视图

HashMap<String,String> map=new HashMap<String, String>(); 
for(int i=0; i<arrlist.size();i++) 
{ 
    map.put(arrlist.get(i).trim().toLowerCase(), ""+i+1); 
} 

要获得值米哈希映射 此代码将您的搜索按钮,点击

String id= map.get("yourserchitem") 
lv.setSelection(Integer.parseInt(id)-1); 

上的文字换写这段代码 这里e是我editext

e.addTextChangedListener(new TextWatcher() { 

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

     } 

     @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 
      if(arr.contains(e.getText().toString().trim().toLowerCase())) 
      { 
       String id= map.get(e.getText().toString().trim().toLowerCase()); 
       lv.setSelection(Integer.parseInt(id)-1); 
      } 
     } 
    }); 

变化代码中afterTextChanged的对象与

String middle_string=""; 
      for(int i=0;i<arr.size();i++) 
       { 
        if(arr.get(i).startsWith(e.getText().toString().trim().toLowerCase())) 
        { 
         middle_string=arr.get(i); 
         break; 
        } 
       } 
      if(arr.contains(middle_string)) 
      { 
       String id= map.get(middle_string); 
       lv.setSelection(Integer.parseInt(id)-1); 
      } 
+0

我已经测试过它:它的工作,但我有超过20,000条目,所以每次我的编辑文本改变:它必须循环找到id,然后选择该ID。所以,这使我的程序运行缓慢。我该如何让它运行得更快? : 对(INT I = 0; I <则为list.size();我++) \t \t \t { \t \t \t \t如果(list.get(ⅰ).toLowerCase()startsWith(S。的toString())) \t \t \t \t { \t \t \t \t \t POS = I; \t \t \t \t \t break; \t \t \t \t \t} \t \t \t \t} \t \t lv.setSelection(POS); –

+0

然后您应该将每个条目与一个id关联。你可以使用哈希映射。在哈希映射中,使用name作为key和id作为值,而不是遍历完整列表,只需在搜索按钮的单击上通过传递名称作为键,就可以简单地获取id。 –

+0

亲爱的主席先生,你能告诉我更多关于如何使用哈希映射的细节吗? 请告诉我关于此的代码!谢谢 –

0

你有没有听说过AutoCompleteTextView(ACTV)。

只需传递你必须ACTV的单词数组。所以当用户开始输入时,会根据您拥有的单词列表来预测单词。这更像是Google即时搜索。请尝试并让我们知道

+0

我知道它!但在我的情况下,我想用listview!你能告诉我怎么办? –