Java 安卓搜索活动

Java 安卓搜索活动,java,android,database,search,button,Java,Android,Database,Search,Button,我创建了一个应用程序,它只是一个列表视图,其中包含一些值,每次我单击一个项目,它都会启动一个新的意图。我希望我的列表是可搜索的,所以我在上面添加了一个搜索按钮 我看到了一些使用本地数据库的示例,但是我没有找到一个完整的教程来说明如何在我的应用程序中实现这一点 最好的方法是什么? 有谁能给我举个好的例子,或者向我解释一下这是怎么回事吗?这并不像看上去那么简单,但足够简单。您希望使您的适配器(您需要一个自定义适配器)实现可过滤接口。然后,当您“执行过滤”时,您在数据库中执行查询并返回更新的结果,调用

我创建了一个应用程序,它只是一个列表视图,其中包含一些值,每次我单击一个项目,它都会启动一个新的意图。我希望我的列表是可搜索的,所以我在上面添加了一个搜索按钮

我看到了一些使用本地数据库的示例,但是我没有找到一个完整的教程来说明如何在我的应用程序中实现这一点

最好的方法是什么?
有谁能给我举个好的例子,或者向我解释一下这是怎么回事吗?

这并不像看上去那么简单,但足够简单。您希望使您的适配器(您需要一个自定义适配器)实现
可过滤接口。然后,当您“执行过滤”时,您在数据库中执行查询并返回更新的结果,调用
notifydatasetchange()
。我不能很快找到一个好的例子,但已经足够好了

之后,您需要“连接”适配器的过滤器和EditText。将TextWatcher添加到编辑文本中,并在
PostTextChanged()
调用
getFilter().filter(文本)


差不多就是这样。

这并不像看上去那么简单,但足够简单。您希望使您的适配器(您需要一个自定义适配器)实现
可过滤接口。然后,当您“执行过滤”时,您在数据库中执行查询并返回更新的结果,调用
notifydatasetchange()
。我不能很快找到一个好的例子,但已经足够好了

之后,您需要“连接”适配器的过滤器和EditText。将TextWatcher添加到编辑文本中,并在
PostTextChanged()
调用
getFilter().filter(文本)

差不多就是这样。

请参阅此演示

我已经实现了基于EditText中输入的文本的具有搜索功能的ListView

@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    searchTextLength = searchEditText.getText().length();
    m_orders.clear();
    m_orders = new ArrayList<SearchData>();
    //SearchData o1 = new SearchData();
    SearchData o[]=new SearchData[search_list.length];
    for(int i=0; i<search_list.length; i++)
    {
        if(searchTextLength <= search_list[i].length())
        {
            if(searchEditText.getText().toString().equalsIgnoreCase((String) search_list[i].subSequence(0, searchTextLength)))
            {
                o[i]=new SearchData();
                o[i].setTitleName(search_list[i]);
                o[i].setsubTitleName(subTitle_list[i]);
                m_orders.add(o[i]);
            }
        }
    }

    this.m_adapter = new OrderAdapter(this, R.layout.search_row, m_orders);
    lv.setAdapter(this.m_adapter);
    m_adapter.notifyDataSetChanged();
    //getOrders();

    //lv1.setAdapter(new ArrayAdapter<String>(SearchActivity.this,R.layout.search_layout , arr_sort));
}
@覆盖
公共无效后文本更改(可编辑的s){}
@凌驾
public void beforeTextChanged(字符序列s、int start、int count、int after){}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
searchTextLength=searchEditText.getText().length();
m_orders.clear();
m_orders=new ArrayList();
//SearchData o1=新的SearchData();
SearchData o[]=新的SearchData[search_list.length];
有关(inti=0;i的信息,请参见此演示

我已经实现了基于EditText中输入的文本的具有搜索功能的ListView

@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    searchTextLength = searchEditText.getText().length();
    m_orders.clear();
    m_orders = new ArrayList<SearchData>();
    //SearchData o1 = new SearchData();
    SearchData o[]=new SearchData[search_list.length];
    for(int i=0; i<search_list.length; i++)
    {
        if(searchTextLength <= search_list[i].length())
        {
            if(searchEditText.getText().toString().equalsIgnoreCase((String) search_list[i].subSequence(0, searchTextLength)))
            {
                o[i]=new SearchData();
                o[i].setTitleName(search_list[i]);
                o[i].setsubTitleName(subTitle_list[i]);
                m_orders.add(o[i]);
            }
        }
    }

    this.m_adapter = new OrderAdapter(this, R.layout.search_row, m_orders);
    lv.setAdapter(this.m_adapter);
    m_adapter.notifyDataSetChanged();
    //getOrders();

    //lv1.setAdapter(new ArrayAdapter<String>(SearchActivity.this,R.layout.search_layout , arr_sort));
}
@覆盖
公共无效后文本更改(可编辑的s){}
@凌驾
public void beforeTextChanged(字符序列s、int start、int count、int after){}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
searchTextLength=searchEditText.getText().length();
m_orders.clear();
m_orders=new ArrayList();
//SearchData o1=新的SearchData();
SearchData o[]=新的SearchData[search_list.length];

对于(int i=0;i谢谢你,我将尝试实现这一点,并让你知道谢谢你,我将尝试实现这一点,并让你知道如果你的问题解决了,那么你必须接受答案,以便它可以帮助其他人。我真的不明白这是如何工作的…我真的想看到一个工作示例OK。你想从哪里搜索?我的意思是你正在使用arrayList for the List Out the data right??请回答我以获得您的解决方案。因此,我有一个名为classes的数组,并用这些值填充我的listview。作为该列表的标题,我有一个名为search的按钮。当我单击该按钮时,它会调用搜索意图。我创建了一个名为search的类,并修改了我的清单。我该如何操作在该数组中搜索?如何在listview上显示结果?使用autocomplete会更容易吗?好的。我得到了您想要的。您想在EditText中写入一些内容,并在此基础上从listview中搜索数据。但是数据应该显示到下一个活动,对吗?那么我的代码是否适用于该活动为此,你必须将搜索名称传递到下一个活动,并输入上面的代码。仍然没有解决问题,请告诉我。我会提供帮助。谢谢。如果你的问题解决了,那么你必须接受答案,这样才能帮助其他人。我不太明白这是如何工作的…我真的想看看一个工作示例OK。你想从哪里搜索h?我的意思是,您是否使用ArrayList来列出数据?请回答我以获得您的解决方案。因此,我有一个名为“类”的数组,并用这些值填充我的listview。作为该列表的标题,我有一个名为“搜索”的按钮。当我单击该按钮时,它将调用搜索意图。我创建了一个名为“搜索”的类,并修改了d我的清单也是。我如何在该数组中搜索?我如何在列表视图上显示结果?使用“自动完成”会更容易吗?好的。我得到了你想要的。你想在编辑文本中写入一些内容,并基于此,你想从列表视图中搜索数据。但是数据应该显示到下一个活动,对吗?是这样吗当我的代码是工作的,但为此,你必须通过该搜索名称到下一个活动,并把上面的代码。仍然没有解决,然后让我知道。我想帮助。谢谢。