【问题标题】:search functionality for json contentjson 内容的搜索功能
【发布时间】:2014-10-07 10:55:31
【问题描述】:

我开发了一个 android 应用程序,其中所有内容都从 json 中获取,这是使用 asynctask 完成并填充到列表视图中的。我在应用程序中有近 10 个自定义列表视图。现在我想在主页中实现单个搜索。我是安卓新手。请建议我,如何实现它。仅对 json 对象中的标题节点需要搜索。我知道如何设置搜索小部件、listview xml、添加清单文件元数据和搜索活动到主要活动。我想知道,如何实现对所有自定义列表视图的单一搜索。

我的 json 文件如下所示。自定义列表视图包含图像、标题和描述。

   [
     {
         "name":"Steve",
         "title":"How things work",
         "image":url,
     },
     {
         "name":"Jack",
         "date":"helium extraction",
         "image":url,
     }
   ]

【问题讨论】:

  • 不同的自定义视图是否有不同的片段?
  • 首页的十个分类作为按钮,我用intents打开指定的activity。 Fragment 仅用于带有导航抽屉的主页。

标签: android json search


【解决方案1】:

您可以做一件事来快速搜索,将所需数据保存在 arrayList 中,然后只需使用“.contains”运行 for 循环

JSONObject jsonObjRecv = HttpClientJSON.SendHttpPost(Appconstants.BASE_URL + Appconstants.DATA, jobjsend);   

你会在jsonObjRecv中得到json响应,之后使用:

title = jsonObjRecv.getString("title");                

现在与

 if(title.contains(//your search string)){//conditions and code }

【讨论】:

    【解决方案2】:

    1. 首先,创建一个Object User 例如:

    public class User{
      String name;
      String title;
      String UrlImage;
    
      // setter
      // getter
    
    }
    

    2.然后创建一个ListAdapter extends BaseAdapter来填充ListView中的数据

    (看AndroidHive的这个教程)

    另请参阅 TutoZone.info 中的 this tutoriel(法语),了解如何在自定义适配器中填充数据

    3. 对于搜索功能,创建一个布局 layout_search 包含 EditText searchEditText

    4. 将此布局包含在每个包含您的数据(来自 Json)的 listView 的布局中

    5. 在您的 asynckTask 中,将每个 JsonObject 添加到 A ArrayList<User> ,在解析结束时,您将有一个 arrayList 包含所有数据 [User(name, title,url)] 并填充到您的 listView

    6. BVack 到搜索功能,在每个活动上添加一个监听器到 editText:addTextChangedListener:

    EditText fillSearch=(EditText)findViewById(R.id.searchEditText);
    
    fillSearch.addTextChangedListener(new TextWatcher() {
    
                @Override
                public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                    // TODO Auto-generated method stub
    
                }
    
                @Override
                public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                        int arg3) {
                    // TODO Auto-generated method stub
    
                }
    
                @Override
                public void afterTextChanged(Editable arg0) {
                    // TODO Auto-generated method stub
                     // TODO Auto-generated method stub
                    String text = fillSearch.getText().toString().toLowerCase(Locale.getDefault());
    
                  ArrayList<User> list =  search(text); // our function 
                }
            });
    

    7. 添加搜索方法,返回一个包含我们搜索的所有数据的列表(从用户在 EditText 中输入的文本开始):

     public  ArrayList<User>search(String s)
    {
         ArrayList<User> list= new ArrayList<User>();
    
             for (User u: listeUsers) {  // listUsers= contains all data parsed in asynckTask
                 if(User.getTitle().toLowerCase().startsWith(s))
                 {
                     list.add(u);
                 }
               }
             return list;
    }
    

    【讨论】:

    • 感谢您的明确解释。如果我将来更改服务器端的内容,它会起作用吗?我的意思是 json...
    • 我不想在所有页面中显示搜索编辑字段。但在第 4 点中,您提到了类似“4。在每个包含您的数据的 listView 的布局中包含此布局(来自 Json)”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2017-05-17
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多