Android Listview从edittext搜索

时间:2013-12-17 09:47:17

标签: android database listview android-listview android-fragments

现在我正在使用edittext和listview在android中创建一个程序。我想使用上面的edittext搜索listview项目。在将数据填充到listview之后,当用户在edittext中键入文本时,listview将滚动到以该文本开头的位置。示例:我有项目:apple,application,book,boy,car,cat,cash .....当我在edittext中键入b时,listview将滚动到book。我想使用listview.setSelection(position),但我不知道如何从我的edittext搜索中获取位置。我希望每个人都可以帮助我。谢谢你的进步!

3 个答案:

答案 0 :(得分:0)

您是否听说过AutoCompleteTextView(ACTV)。

只需将您拥有的一系列字词传递给ACTV即可。因此,当用户开始输入时,将根据您拥有的单词数组预测单词。这更像是谷歌即时搜索。试着告诉我们

答案 1 :(得分:0)

您可以按照以下步骤执行此操作。

  1. 检查列表视图中是否有用户输入的字词。
  2. 如果是,则分别在数组列表或列表视图中获取该单词的ID或位置。
  3. 然后将选择设置为检索到的ID。
  4. 如果你仍然无法获取id,请在你的代码中请求使用字符串数组自定义数组适配器

    溶胶:

    在你的情况下,它可能就像

    此代码应该在您的oncreate或您启动listview的任何地方

    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);
                }
    

答案 2 :(得分:0)

public class MainActivity extends AppCompatActivity {

String [] items;
ArrayList<String> listview;
ArrayAdapter<String> adapter;
ListView lst_view1;
EditText edt_text1;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(activity_main);

    lst_view1 = (ListView)findViewById(R.id.lst_view1);
    edt_text1 = (EditText)findViewById(R.id.edt_text1);
    initlist();
    edt_text1.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.toString().equals("")) {
                initlist();
            } else {
                searchItem(s.toString());
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
}

public void searchItem (String textTosearch){
    for(String item:items){
        if(!item.contains(textTosearch)){
            listview.remove(item);
        }
    }
    adapter.notifyDataSetChanged();
}

public void initlist() {
    items = new String [] {"iran","usa","canada","russia","tehran","yazd","esfahan","amir","rose",
            "hashemi","rezvani","ardebil","microsoft","google","amazon","tesla-motors"};
    listview = new ArrayList<>(Arrays.asList(items));
    adapter = new ArrayAdapter <String> (this, R.layout.list_item, R.id.txtview1 , listview);
    lst_view1.setAdapter(adapter);
}
}