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