Discusión general sobre Android Exclusivo para hablar de Android

Respuesta
 
Herramientas
  #1  
Viejo 08/04/15, 15:15:06
Array

[xs_avatar]
Gonzalo.gerezm Gonzalo.gerezm no está en línea
Usuario poco activo
 
Fecha de registro: abr 2015
Mensajes: 2
Tu operador: Movistar

Problemas con BaseAdapter y HashMap

soy nuevo en este foro desde ya gracias a todos por tomarse el tiempo de crear estos espacios colaborativos. Mi pregunta es la siguiente, tengo una app en android en donde realizo un listado de articulos. Obtengo los datos codificados en JSON y los guardo en un ArrayLIst hasta ahi todo bien funciona de maravilla, luego me surge la necesidad de usar un BaseAdapter para implementar Filterable y usar el metodo GetFilter().. usando el log me muestra que el codigo se ejecuta completo pero el ListView nunca se filtra. Desde ya muchas gracias a todos. Saludos


ESTE ES EL CODIGO DEL MAIN_ACTIVITY

Código:
public class MainActivity extends Activity {
    public static final int REQUESTCODE_CAPTURA_DE_IMAGEN = 1;
    private String codImg;
    private String ruta;
    private File file;
    private Uri output;
    private ProgressDialog pDialog;
    ArticulosAdapter miAdapter;
    JSONArray contacts = null;
    ArrayList<HashMap<String, String>> articulosList = new ArrayList<HashMap<String, String>>();

    private static String url_articulos = "http://ip/ListaArticulos/consultaArt.php";
    String lon = "101.5178";
    String lat = "3.0724";
    public static final String TAG_ART = "Desc_art";
    public static final String TAG_ID = "cod_art";
    JSONArray articulos = null;
    ListView list;
    EditText inputSearch;

    @override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        articulosList = new ArrayList<HashMap<String, String>>();

        list = (ListView)findViewById(R.id.listView1);

        inputSearch = (EditText) findViewById(R.id.editTextBuscar);

        inputSearch.addTextChangedListener(new TextWatcher() {

            @override
            public void onTextChanged(CharSequence cs, int arg1, int arg2,
                    int arg3) {
                // When user changed the Text
                //MainActivity.this.adapter.getFilter().filter(cs);
            }

            @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
            }
        });

        list.setOnItemClickListener(new OnItemClickListener() {
            @override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                TextView txt = (TextView) view.findViewById(R.id.hora);

                codImg = (String) txt.getText();
                ruta = Environment.getExternalStorageDirectory() + "/"
                        + codImg.trim() + ".jpg";
                file = new File(ruta);
                Intent miIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                output = Uri.fromFile(file);
                miIntent.putExtra(MediaStore.EXTRA_OUTPUT, output);
                if (miIntent.resolveActivity(getPackageManager()) != null)
                    startActivityForResult(miIntent,
                            REQUESTCODE_CAPTURA_DE_IMAGEN);

            }
        });

        new Activity().execute();

    }

    public void SetListViewAdapter(ArrayList<HashMap<String, String>> articulosList) {
        //Context contexto = MainActivity.this;
        miAdapter = new ArticulosAdapter(this, articulosList);
        //adapter = new ArticulosAdapter(getBaseContext(), articulosList);
        list.setAdapter(miAdapter);;
    }

    @override
    protected void onActivityResult(int codigoDeSolicitud,
            int codigoDeResultado, Intent datos) {
        if (codigoDeResultado == RESULT_OK) {
            switch (codigoDeSolicitud) {
            case REQUESTCODE_CAPTURA_DE_IMAGEN: {

                Intent pasarImagen = new Intent(getApplicationContext(),
                        Image_Manager.class);
                pasarImagen.putExtra("ruta", output);
                pasarImagen.putExtra("codigo", codImg);
                pasarImagen.putExtra("rutaEnviada", ruta);
                startActivity(pasarImagen);
            }
            }
        }
        super.onActivityResult(codigoDeSolicitud, codigoDeResultado, datos);
    }

    class Activity extends AsyncTask<Void, Void, Void> {

        @override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Please Wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        protected Void doInBackground(Void... arg0) {
            // Creating service handler class instance
            ServiceHandler sh = new ServiceHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url_articulos,
                    ServiceHandler.GET);

            Log.d("Response: ", "> " + jsonStr);

            if (jsonStr != null) {
                try {

                    contacts = new JSONArray(jsonStr);

                    // looping through All Contacts
                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);

                        String desc = c.getString(TAG_ART);
                        String id = c.getString(TAG_ID);
                        HashMap<String, String> contact = new HashMap<String, String>();
                        contact.put(TAG_ART, desc);
                        contact.put(TAG_ID, id);
                        articulosList.add(contact);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }

            return null;
        }

        protected void onPostExecute(String file_url) {
            pDialog.dismiss();


                    SetListViewAdapter(articulosList);


        }
    }
}

ESTE ES EL CODIGO DEL ADAPTADOR

Código:
public class ListViewAdapter extends BaseAdapter implements Filterable{

	Context contexto;
	LayoutInflater inflater;
	ArrayList<HashMap<String,String>> datos;
	HashMap<String,String> map = new HashMap<String,String>();
	HashMap<String,String> filtrando = new HashMap<String,String>();
	ArrayList<HashMap<String, String>> originalData;
	ArrayList<HashMap<String, String>> temporyList;
	
	
	public ListViewAdapter(Context a, ArrayList<HashMap<String,String>> array)
	{
		contexto=a;
		datos=array;
		originalData = array;
		temporyList = array;
	}


 @override
	public int getCount() {
		// TODO Auto-generated method stub
		return datos.size();
	}


 @override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return null;
	}


 @override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return 0;
	}


 @override
	public View getView(int position, View convertView, ViewGroup parent) {
		TextView articulo;
		TextView id;
		View itemView;
		if(convertView==null){
		inflater= (LayoutInflater) contexto.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		
		 itemView = inflater.inflate(R.layout.list_item, null);}
		else{
			itemView=convertView;}
		
		map = datos.get(position);
		
		
		articulo = (TextView) itemView.findViewById(R.id.tarea);
		id = (TextView) itemView.findViewById(R.id.hora);
		
		
		articulo.setText(map.get("Desc_art").toString());
		id.setText(map.get("cod_art").toString());
		
		return itemView;
	}


 @override
	public Filter getFilter() {
		Filter filtrar = new Filter()
		{
			FilterResults results;
			ArrayList<HashMap<String, String>> filteredList;
			
			
		 @override
			protected FilterResults performFiltering(CharSequence constraint) {
				results = new FilterResults();
				
				filteredList = new ArrayList<HashMap<String,String>>();
				if(constraint ==null || constraint.toString().length() ==0)
				{
					results.values = originalData;
					results.count = originalData.size();
				}
				else
				{
					
					constraint = constraint.toString();
					for (int i = 0; i < originalData.size(); i++) {
						
						String art =  originalData.get(i).get("Desc_art").toString();
						String id = originalData.get(i).get("cod_art");
						filtrando.put("Desc_art", art);
						filtrando.put("cod_art", id);
						String data = filtrando.get("Desc_art").toString();/*+" "+ filtrando.get("cod_art");*/
						Log.e("queandee", data.toString());
						if (data.toLowerCase().contains(constraint.toString())) {
							filteredList.add(filtrando);
						}
					}
					results.values=filteredList;
					results.count = filteredList.size();
				}
			
				return results;
			}
			
		 @SuppressWarnings("unchecked")
			protected void publishResults(CharSequence constraint,
					FilterResults results) {
				temporyList=(ArrayList<HashMap<String,String>>) results.values;
				notifyDataSetChanged();
				
			}

		};
		return filtrar;
	}
}
Responder Con Cita


Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Discusión general sobre Android



Hora actual: 12:51:16 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /