2015-09-05 6 views
0

Ниже приведен код, отображающий список имен в виде списка. Я хочу отфильтровать представление списка на основе ввода текстового поля поиска.Показать список фильтров из списка в Android

Я добавил метод addTextChangedListener для edittext. Но я вижу ошибку в методе getFilter() как «не могу решить». Согласно google, я нашел метод getFilter() для ArrayAdapter. Я хочу знать, как я могу заставить метод getFilter() работать с ListAdapter.

Пожалуйста, дайте мне знать.

package com.smoothbalance.smothbalance; 


     public class AddedClientList extends CommonDrawer { 
      EditText searchTextBox; 
      ListAdapter adapter; 
      ListView addedlistofclient; 

      // JSON Nodes 
      private static final String TAG_CONTACTS = "data"; 
      private static final String TAG_ID = "id"; 
      private static final String TAG_FULL_NAME = "full_name"; 
      private static final String TAG_EMAIL = "email"; 

      //JSON array 
      JSONArray json_data = null; 

      // Hashmap for ListView 
      ArrayList<HashMap<String, String>> dataList; 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       View view = layoutInflater.inflate(R.layout.activity_added_client_list, null, false); 
       mDrawerLayout.addView(view, 0); 
       addedlistofclient = (ListView) findViewById(R.id.listView_Added_Client); 
       searchTextBox = (EditText) findViewById(R.id.Search_added_clients); 
       dataList = new ArrayList<HashMap<String, String>>(); 
           if (CommonFunctions.isNetworkAvailable(getBaseContext())) { 
        params.add(new BasicNameValuePair("", user_id)); 
        new Added_client_list().execute(); 
       } else { 
        Toast.makeText(getApplicationContext(), "Network Not Available... \n Please check Your Wifi Connection or Mobile Network", Toast.LENGTH_LONG).show(); 
       } 

       searchTextBox.addTextChangedListener(new TextWatcher() { 
        @Override 
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     AddedClientList.this.adapter.getFilter().filter(s); 
        } 

        @Override 
        public void onTextChanged(CharSequence s, int start, int before, int count) { 

        } 

        @Override 
        public void afterTextChanged(Editable s) { 

        } 
       }); 
      } 

      private class Added_client_list extends AsyncTask<String, String, String> { 
       @Override 
       protected void onPreExecute() { 
          } 

       @Override 
       protected String doInBackground(String... param) { 
        String network_error = null; 
        String url = getString(R.string.getClientlist) + user_id + "/Clients"; 
        ServiceHandler serviceHandler = new ServiceHandler(); 
        String jsonStr = serviceHandler.makeServiceCall(url, ServiceHandler.GET); 
        Log.d("Response: ", "> " + jsonStr); 
        network_error = jsonStr; 
        if (jsonStr != null) { 

         try { 
          JSONObject jsonObject = new JSONObject(jsonStr); 

          // getting json array node 
          json_data = jsonObject.getJSONArray(TAG_CONTACTS); 
          for (int i = 0; i < json_data.length(); i++) { 
           JSONObject c = json_data.getJSONObject(i); 
           String id = c.getString(TAG_ID); 
           String full_name = c.getString(TAG_FULL_NAME); 
           String email = c.getString(TAG_EMAIL); 


           // tmp hashmap for single data 
           HashMap<String, String> data = new HashMap<String, String>(); 
           // adding each child node to HashMap key => value 
           data.put(TAG_ID, id); 
           data.put(TAG_FULL_NAME, full_name); 
           data.put(TAG_EMAIL, email); 


           // adding contact to contact list 
           dataList.add(data); 
        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
        } 
        return network_error; 
       } 

       @Override 
       protected void onPostExecute(String aVoid) { 
    adapter = new SimpleAdapter(AddedClientList.this, dataList, R.layout.customelistview, new String[] 
          {TAG_FULL_NAME, TAG_EMAIL,}, new int[]{R.id.details, R.id.serviceData}); 

        addedlistofclient.setAdapter(adapter); 
         } 

     } 
+0

Сделайте поле * adapter * типа 'SimpleAdapter', которое реализует интерфейс Filterable. – Luksprog

+0

Спасибо, что это работает для меня – user3311567

ответ

0

Как Luksprog упоминался в комментариях, ListAdapter не фильтруемый, вы бы должны либо создать customAdapter путем расширения listadapter и реализации фильтрующихся в этом объекте, или использовать адаптер предоставленного SDK, который implementals фильтруемым

Смежные вопросы