2014-10-07 69 views
0

我開發了一個android應用程序,其中所有的內容都是從json中獲取的,這些內容是使用asynctask完成的,並填充在列表視圖中。我在應用程序中有近10個自定義列表視圖。現在我想在主頁中實現一個搜索。我是android新手。請建議我,如何實施它。只有json對象中的標題節點需要搜索。我知道如何設置搜索小部件,列表視圖xml,添加清單文件元數據以及搜索活動到主要活動。我想知道,如何實現所有自定義列表視圖的單一搜索。json content的搜索功能

我的json文件如下所示。自定義列表視圖包含圖片,標題和說明。

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

活動是否具有不同的自定義視圖不同的片段? – user1728071 2014-10-07 10:59:14

+0

http://www.survivingwithandroid.com/2012/10/android-listview-custom-filter-and.html – 2014-10-07 11:05:09

+0

主頁中的十個類別作爲按鈕,我用意圖打開指定的活動。片段僅用於帶導航抽屜的主頁。 – 2014-10-07 11:09:48

回答

0

首先,創建例如對象User

public class User{ 
    String name; 
    String title; 
    String UrlImage; 

    // setter 
    // getter 

} 

2.然後創建一個ListAdapter extends BaseAdapter ListView中

填充數據0

(看從AndroidHive這個tutoruel)

另見this tutoriel(法語)從TutoZone.info來看看如何在custiom適配器填充數據

對於搜索fonctionality,創建layout layout_search包含EditTextsearchEditText

4.包括每個佈局此佈局包含一個ListView與您的數據(從JSON)

5.在你asynckTask,添加每個JsonObject至A ArrayList<User>,在解析你將有一個ArrayList的結束包含所有數據[User(name, title,url)]的,人口在你的ListView

6. BVack到搜索fonctionality,每個活動添加一個偵聽到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.添加搜索方法中包含的所有數據ythat我們搜索(開始與用戶的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; 
} 
+0

感謝您的明確解釋。如果我將來更改服務器端的內容,它會起作用嗎?我的意思是json ... – 2014-10-07 11:43:04

+0

我不想在所有頁面中顯示搜索編輯字段。但在第4點中,您提到了類似「4.將此佈局包含在每個包含帶有您的數據的listView(來自Json)的佈局中」 – 2014-10-07 11:58:37

0

你可以做一件事的快速搜索,在的ArrayList保存所需的數據THN只是做一個for循環運行用「載」

+0

您能否請您展示您所知道的任何教程或示例代碼。 – 2014-10-07 11:10:48

+0

我可能會改變服務器端(JSON)的數據,所以如果我使用「.contains」,它將如何工作? – 2014-10-07 12:00:31

+0

JSONObject jsonObjRecv = HttpClientJSON.SendHttpPost(Appconstants.BASE_URL + Appconstants。DATA,jobjsend);您將在jsonObjRecv中獲得json響應,然後使用:title = jsonObjRecv.getString(「title」);現在用if(title.contains(//您的搜索字符串)){//條件和代碼} – kiturk3 2014-10-08 10:46:48