Autore Topic: EditText search en listview personalizado  (Letto 394 volte)

Offline Spagna

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy
  • Sistema operativo:
    windows 7
EditText search en listview personalizado
« il: 22 Aprile 2013, 10:57:41 CEST »
0
Ciao a tutti,
ho fatto un listView con dato remoto db (Mysql) ora voglio filtrare la lista pero
mi da un errore prima di poterlo esecutare sono due giorni che faccio tentativi pero non riesco a dare una soluzione
Vi metto el codice del BaseAdapter y il MainActivity :

BaseAdapter:
Codice (Java): [Seleziona]
package com.xxxxxxx.com;

import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


public class CityAdapterPartner extends BaseAdapter {
          protected Activity activity;
          protected ArrayList<CityPartner> items;
                     
          public CityAdapterPartner(Activity activity, ArrayList<CityPartner> items) {
            this.activity = activity;
            this.items = items;
          }
         
          @Override
          public int getCount() {
            return items.size();
          }
         
          @Override
          public Object getItem(int position) {
            return items.get(position);
          }
         
          @Override
          public long getItemId(int position) {
            return items.get(position).getIdPartner();
          }
         
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
            View vi=convertView;
                 
            if(convertView == null) {
              LayoutInflater inflaterCuatro = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              vi = inflaterCuatro.inflate(R.layout.list_partner, null);
            }
                 
            CityPartner cityP = items.get(position);
                 
            ImageView image = (ImageView) vi.findViewById(R.id.PartnerImg);
            image.setImageBitmap(cityP.getimagePartner());
                 
            TextView Locale = (TextView) vi.findViewById(R.id.PartnerUno);
            Locale.setText(cityP.getLocalePartner());
           
           
            TextView Dire = (TextView) vi.findViewById(R.id.PartnerDos);
            Dire.setText(cityP.getDireccionPartner()+"-"+cityP.getLocalidadPartner());
           
            TextView Provincia = (TextView) vi.findViewById(R.id.PartnerTres);
            Provincia.setText(cityP.getCPPartner()+"-"+cityP.getProvinciaPartner());
           
            TextView Telefono = (TextView) vi.findViewById(R.id.PartnerCuatro);
            Telefono.setText("Horarios :"+cityP.getHorariosPartner()+" - TLF.: "+cityP.getTelefonoPartner());
           
           /* TextView Hora = (TextView) vi.findViewById(R.id.HorasOfe);
            Hora.setText("Hora :"+citycuatro.getHora());
           
           
            TextView Numero = (TextView) vi.findViewById(R.id.NumeroOfe);
            Numero.setText("Nº :"+citycuatro.getNumero());*/

           
         
           
           
            return vi;
          }
         
        }
Hora il codice del MainActivity:
Codice (Java): [Seleziona]
private class Taskreserva extends AsyncTask<String, String, String> {

            private ProgressDialog pDialog = new ProgressDialog(Partner.this);
           

            protected void onPreExecute() {
                //para el progress dialog
                pDialog = new ProgressDialog(Partner.this);
                pDialog.setMessage("Cargando Partner....");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(false);
                pDialog.show();
               /* progressDialog.setOnCancelListener(new OnCancelListener() {
                    public void onCancel(DialogInterface arg0) {
                        todos.this.cancel(true);
                    }
                });*/

            }

            protected String doInBackground(String... urls) {
                String response = "";
                        for (String url : urls) {
                                DefaultHttpClient client = new DefaultHttpClient();
                                HttpGet httpGet = new HttpGet(url);
                                try {
                                        HttpResponse execute = client.execute(httpGet);
                                        InputStream content = execute.getEntity().getContent();

                                        BufferedReader buffer = new BufferedReader(new InputStreamReader(
                                                        content));
                                        String s = "";
                                        while ((s = buffer.readLine()) != null) {
                                                response += s;
                                        }
                               

                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
               
                        return response;
               
            } // protected Void doInBackground(String... params)


            protected void onPostExecute(String response) {
                  pDialog.dismiss();
                String resultado =response;
                final  ListView lvPartner = (ListView) findViewById(R.id.partnerlist);
                //enables filtering for the contents of the given ListView
                 lvPartner.setTextFilterEnabled(true);
                 
                     final ArrayList<CityPartner> citiesAvaiablePartner = new ArrayList<CityPartner>();
                         lvPartner.setAdapter(new CityAdapterPartner(Partner.this, citiesAvaiablePartner));
                         
                        try{
                                 // Parseamos la respuesta obtenida del servidor a un objeto JSON    
                               
                                JSONObject jsonObject = new JSONObject(resultado);
                    JSONArray newcities = jsonObject.getJSONArray("partner");

                   

                    for(int i=0; i < newcities.length(); i++) {

                       JSONObject city = newcities.getJSONObject(i);
                                         
                              // Creamos el objeto City
                       CityPartner c = new CityPartner(city.getInt("id"),city.getString("locale"),
                                   city.getString("direccion"),city.getString("localidad"),
                                   city.getString("provincia"),city.getString("cp"),
                                   city.getString("telefono"),city.getString("horarios"));
                                      c.setDataPartner(city.getString("image"));

                                     Log.i("YourNight", "*****PARTNER **2*****" +city.getString("locale"));

                              citiesAvaiablePartner.add(c);
                             
                           

                    } // End for Loop
                   

                   

                } catch (JSONException e) {

                    Log.e("JSONException", "Error: " + e.toString());
         
                } // catch (JSONException e)
                                          // Creamos el objeto CityAdapter y lo asignamos al ListView
                        //  final  CityAdapterPartner cityAdapter = new CityAdapterPartner(Partner.this, citiesAvaiablePartner);
                        //  lvPartner.setAdapter(cityAdapter);
                         
                             
                                  EditText myFilter = (EditText) findViewById(R.id.textEditPartner);
                                  myFilter.addTextChangedListener(new TextWatcher() {
                                 
                                  public void afterTextChanged(Editable s) {
                                  }
                                 
                                  public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                                  }
                                 
                                  public void onTextChanged(CharSequence s, int start, int before, int count) {
                                         CityAdapterPartner.getFilter().filter(s.toString());                             }
                                  });
                         
Mi marca in rosso " CityAdapterPartner.getFilter().filter(s.toString());"
Con una Annotazione "The method getFilter() is undefined for the type CityAdapterPartner"
Non so dove ho sbagliato
Una mano per piacere
Un saluto

Offline jd4smart

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy s
  • Sistema operativo:
    Win7
Re:EditText search en listview personalizado
« Risposta #1 il: 22 Aprile 2013, 19:50:13 CEST »
0
mmm

cercando così velocemente nelle API, non mi pare che che ci sia un metodo "getFilter()" per la classe BaseAdapter!

Un simile metodo esiste per la classe "CursorAdapter" (che tra l'altro, possibilità di interrogazione sql da remoto permettendo)
nel tuo caso sarebbe da preferire visto che dici di aver a che fare con un db.

Ti eviteresti la parte di parsing in JSON e la gestione dell'arrayList di elementi.....

query al DB con restituzione di un cursor -> adapter di tipo CursorAdapter (o SimpleCursorAdapter) e override dei metodi "newView" "bindView" per popolare la tua listview  ;-)