现在我正在使用edittext和listview在android中创建一个程序。我想使用上面的edittext搜索listview项目。在将数据填充到listview之后,当用户在edittext中键入文本时,listview将滚动到以该文本开头的位置。示例:我有项目:apple,application,book,boy,car,cat,cash .....当我在edittext中键入b时,listview将滚动到book。我想使用listview.setSelection(position),但我不知道如何从我的edittext搜索中获取位置。我希望每个人都可以帮助我。谢谢你的进步!
答案 0 :(得分:0)
您是否听说过AutoCompleteTextView(ACTV)。
只需将您拥有的一系列字词传递给ACTV即可。因此,当用户开始输入时,将根据您拥有的单词数组预测单词。这更像是谷歌即时搜索。试着告诉我们
答案 1 :(得分:0)
您可以按照以下步骤执行此操作。
如果你仍然无法获取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);
}
}