2015-05-17 34 views
1

我有一個列表視圖,我從JSON數組填充。首先從JSON數組中提取值,然後放入HashMap。然後這個HashMap被添加到一個ArrayList。從這裏,必要的數據被添加到ListAdapter。如何實現使用ListAdapater,ArrayList和HashMap的ListView的搜索

我在網上搜索了幾天,找到一種方法來添加一個搜索功能,但沒有一個使用ListAdapater,ArrayList和HashMap的組合。我是初學者,有人可以幫我做這個嗎?

這是我的代碼

public class ListNew extends Activity { 
ListView list; 
TextView eid; 
TextView ename; 
TextView edesc; 
//Button Btngetdata; 
ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>(); 

//URL to get JSON Array 
private static String url = "somelink"; 

//JSON Node Names 
private static final String TAG_OS = "events"; 
private static final String TAG_EID = "eid"; 
private static final String TAG_ENAME = "ename"; 
private static final String TAG_ETYPE = "etype"; 
private static final String TAG_EDESC = "edesc"; 
private static final String TAG_ESDATE = "esdate"; 
private static final String TAG_EEDATE = "eedate"; 
private static final String TAG_ESTIME = "estime"; 
private static final String TAG_EETIME = "eetime"; 
private static final String TAG_LOCATION = "location"; 
private static final String TAG_CREATED_AT = "created_at"; 
private static final String TAG_EDITED_AT = "edited_at"; 
private static final String TAG_CREATEDBY = "createdby"; 
private static final String TAG_IMAGE = "image"; 
private static final String TAG_APPROVED = "approved"; 

EditText inputSearch; 
ListAdapter adapter; 


public static final String TABLE_EVENT = "event"; 



JSONArray events = null; 


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

    //from here 
    inputSearch = (EditText) findViewById(R.id.etSearch); 

    setContentView(R.layout.listnew); 
    oslist = new ArrayList<HashMap<String, String>>(); 

    new JSONParse().execute(); 


} 

private class JSONParse extends AsyncTask<String, String, JSONObject> { 
    private ProgressDialog pDialog; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     eid = (TextView)findViewById(R.id.vers); 
     ename = (TextView)findViewById(R.id.name); 
     edesc = (TextView)findViewById(R.id.api); 
     pDialog = new ProgressDialog(ListNew.this); 
     pDialog.setMessage("Getting Data ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 



    } 

    @Override 
    protected JSONObject doInBackground(String... args) { 

     JSONParser jParser = new JSONParser(); 

     // Getting JSON from URL 
     JSONObject json = jParser.getJSONFromUrl2(url); 
     return json; 
    } 
    @Override 
    protected void onPostExecute(JSONObject json) { 
     pDialog.dismiss(); 
     try { 
       // Getting JSON Array from URL 
       events = json.getJSONArray(TAG_OS); 
       for(int i = 0; i < events.length(); i++){ 
       JSONObject c = events.getJSONObject(i); 

       // Storing JSON item in a Variable 
       String eid = c.getString(TAG_EID); 
       String ename = c.getString(TAG_ENAME); 
       String etype = c.getString(TAG_ETYPE); 
       String edesc = c.getString(TAG_EDESC); 
       String esdate = c.getString(TAG_ESDATE); 
       String eedate = c.getString(TAG_EEDATE); 
       String estime = c.getString(TAG_ESTIME); 
       String eetime = c.getString(TAG_EETIME); 
       String location = c.getString(TAG_LOCATION); 
       String created_at = c.getString(TAG_CREATED_AT); 
       String edited_at = c.getString(TAG_EDITED_AT); 
       String createdby = c.getString(TAG_CREATEDBY); 
       String image = c.getString(TAG_IMAGE); 
       String approved = c.getString(TAG_APPROVED); 

       HashMap<String, String> map = new HashMap<String, String>(); 

       map.put(TAG_EID, eid); 
       map.put(TAG_ENAME, ename); 
       map.put(TAG_ETYPE, etype); 
       map.put(TAG_EDESC, edesc); 
       map.put(TAG_ESDATE, esdate); 
       map.put(TAG_EEDATE, eedate); 
       map.put(TAG_ESTIME, estime); 
       map.put(TAG_EETIME, eetime); 
       map.put(TAG_LOCATION, location); 
       map.put(TAG_CREATED_AT, created_at); 
       map.put(TAG_EDITED_AT, edited_at); 
       map.put(TAG_CREATEDBY, createdby); 
       map.put(TAG_IMAGE, image); 
       map.put(TAG_APPROVED, approved); 


       oslist.add(map); 
       list=(ListView)findViewById(R.id.list); 
       TextView emptyText = (TextView)findViewById(R.id.empty); 
       list.setEmptyView(emptyText); 

       //Log.d("TAG_is d first one", TAG_APPROVED + "," + approved); 



       adapter = new SimpleAdapter(ListNew.this, oslist, 
         R.layout.list_v, 
         new String[] { TAG_ENAME,TAG_CREATEDBY, TAG_CREATED_AT }, new int[] { 
           R.id.vers,R.id.name, R.id.api}); 


       list.setAdapter(adapter); 

       list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

        @Override 
        public void onItemClick(AdapterView<?> parent, View view, 
              int position, long id) { 
         Intent i = new Intent(ListNew.this, NewEvent.class); 
         i.putExtra("eid", oslist.get(+position).get("eid")); 
         i.putExtra("ename", oslist.get(+position).get("ename")); 
         i.putExtra("etype", oslist.get(+position).get("etype")); 
         i.putExtra("edesc", oslist.get(+position).get("edesc")); 
         i.putExtra("esdate", oslist.get(+position).get("esdate")); 
         i.putExtra("eedate", oslist.get(+position).get("eedate")); 
         i.putExtra("estime", oslist.get(+position).get("estime")); 
         i.putExtra("eetime", oslist.get(+position).get("eetime")); 
         i.putExtra("location", oslist.get(+position).get("location")); 
         i.putExtra("created_at", oslist.get(+position).get("created_at")); 
         i.putExtra("edited_at", oslist.get(+position).get("edited_at")); 
         i.putExtra("createdby", oslist.get(+position).get("createdby")); 
         i.putExtra("image", byteArray); 
         i.putExtra("approved", oslist.get(+position).get("approved")); 
         startActivity(i); 

        } 
       }); 


      }//end if 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 




    } 


} 

}

+0

看這個問題,可以幫助你 http://stackoverflow.com/questions/10355971/how-to-filter-listview-through-edittext – vrbsm

回答

1

按照你的描述,我相信你有你的列表視圖定製適配器實現。在自定義適配器的情況下,馮需要通過實施 http://developer.android.com/reference/android/widget/Filterable.html

http://developer.android.com/reference/android/widget/Filter.html

下面就來創建自己的過濾器是一個簡單的教程,靈感

http://www.survivingwithandroid.com/2012/10/android-listview-custom-filter-and.html

=== =======簡單搜索示例===

您需要在列表視圖的頂部創建一個文本編輯

<EditText 
     android:id="@+id/editTxt" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp" 
     android:maxLines="1" /> 

然後將文本更改偵聽到這個編輯文本

editTxt.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     adapter.getFilter().filter(s.toString());       
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
    } 
}); 

和你做。

+0

我相信我沒有自定義適配器。你能看看代碼嗎?我整個班級在這裏 –

+0

你嘗試使用adapter.getFilter(字符)來過濾掉結果嗎? – theJango

+0

沒有。請告訴我如何在我的代碼中實現它? –

相關問題