2012-10-20 6 views
1

HI je suis le filtrage des données dans listview il y a un editbox avec la recherche ....Filtrer les données dans listview

Maintenant, si j'entre la et entrez le bouton de recherche du filtre se fera ....

ci-dessous est le code

double lat[] = new double[] { 32.711857, 32.80964, 32.751261, 32.753932, 32.751622, 32.769955, 32.770677, 34.304875, 32.854782, 32.761829 }; 
double lon[] = new double[] { -117.159901, -117.238223, -117.247137, -117.16355, -117.165782, -117.162005, -117.16561, -118.461662, -117.27464, 
     -117.172343 }; 

double latitude, longitude; 

String places[] = new String[] { "Gaslamp", "Pacific Beach", "Ocean Beach", "Uptown", "Hillcrest", "Mission Valley", "Fashion Valley", 
     "La Jolla", "San Diego","North Park" }; 

int zipCode[] = new int[] { 92101, 92109, 92107, 92103, 92103, 92123, 92008, 92037, 92115, 92104 }; 

maintenant, quand je clique sur SearchImageView le code suivant sera exécuté ...

ImageView imgSearch = (ImageView) findViewById(R.id.ivIconSearch); 
    imgSearch.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (adapter != null) { 
       adapter.getFilter().filter(edtSearch.getText().toString()); 
       adapter.notifyDataSetChanged(); 
      } 
      return true; 
     } 
    }); 

Maintenant, quand je clique sur la liste voir le code suivant sera exécuté ..

adapter = new SimpleAdapter(PredefinedLocation.this, fillMaps, R.layout.list_item_deal, new String[]{"name"}, new int[]{R.id.name}); 
    // Adding data into listview 
    lv.setAdapter(adapter); 
    lv.setTextFilterEnabled(true); 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 
      // TODO Auto-generated method stu 

     } 
    }); 

Voici ce que je devrais avoir à écrire du code afin que je puisse obtenir la latitude filtrables, longitude, code postal .....

+0

[voir cet exemple] (http://samir-mangroliya.blogspot.in/2012/05/android-sectioned-listview-with-search_6865.html) –

Répondre

0

Je suis la réponse ....

Bien que je sache que ce n'est pas moyen efficace mais pour moi il est résolu le problème

Ici adaptateur si j'imprimer adaptateur de valeur j'ai eu une réponse comme ci-dessous

 System.out.println(adapter); 

    I got value like below .... 

    "{name=SanDeigo}" 


    based on that.... 


    Intent intent = new Intent(PredefinedLocation.this, MainActivity.class); 
      int length = "{name=".length(); 
      String str = adapter.getItem(position).toString(); 
      if (str != null) 
       if (str.length() > 0) 
        str = str.substring(length, str.length() - 1); 

      for (int i = 0; i < places.length; i++) { 
       if (places[i].equals(str)) { 
        intent.putExtra("nearLocation", places[i]); 
        //System.out.println("Near Location = " + places[i]); 
        intent.putExtra("latitude", lat[i]); 
        //System.out.println("LATITUDE = " + lat[i]); 
        intent.putExtra("longitude", lon[i]); 
        //System.out.println("LONGITUDE = " + lon[i]); 
        intent.putExtra("zipcode", zipCode[i]); 
        //System.out.println("ZIP CODE = " + zipCode[i]); 
        PredefinedLocation.this.startActivity(intent); 
        break; 
       } 
      } 
1

vous pouvez ajouter cette fonction de votre adaptateur personnalisé:

@Override public Filter getFilter() { 

      Filter myFilter = new Filter() { 

       @Override 
       protected void publishResults(CharSequence constraint, FilterResults results) { 
        // TODO Auto-generated method stub 
        if (!m_orders.isEmpty()){ 
         clear(); 
        } 

        for (int i = 0; i < tempList.size(); i++) { 
         if(tempList.get(i).getName().toLowerCase().startsWith(constraint.toString().toLowerCase())){ 
          add(tempList.get(i)); 
         } 
        } 

        notifyDataSetChanged(); 
       } 

       @Override 
       protected FilterResults performFiltering(CharSequence constraint) { 
        // TODO Auto-generated method stub 
        return null; 
       } 
      }; 

      return myFilter; 
     } 

et vous pouvez lier cette recherche de filtre à votre editText:

et_search.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 

       m_adapter.getFilter().filter(s, new FilterListener() { 

        @Override 
        public void onFilterComplete(int count) { 
         // TODO Auto-generated method stub 
         m_adapter.notifyDataSetChanged(); 
        } 
       }); 
      } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, 
        int arg2, int arg3) { 

      } 

      @Override 
      public void afterTextChanged(Editable str) { 

      } 
     }); 

utiliser ce lien: https://stackoverflow.com/questions/12930403/how-to-search-name-by-searchview/12930564#12930564

+0

monsieur pouvez-vous me donner un exemple avec approprié mon exemple! –

+0

monsieur je n'ai utilisé aucun adaptateur personnalisé! –

0

La meilleure façon est de personnaliser la classe Adapter. Ecrivez une méthode pour filtrer le tableau de données par vous-même. Après cela remplir les données filtrées à votre listview via getView() méthode

Questions connexes