package kwik.app.activities; import java.util.HashMap; import java.util.List; import java.util.Map; import kwik.app.KwikApp.KwikAppData.KwikOrder; import kwik.app.R; import kwik.app.activities.custom.KwikFragmentActivity; import kwik.remote.api.Order; import kwik.services.KwikAPIService; import kwik.util.KwikResultReceiver; import kwik.util.Util; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.CheckBox; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; public class OrdersActivity extends KwikFragmentActivity implements OnItemClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* Asociamos la vista del search list con la activity */ this.setContentView(R.layout.item_list); Intent intent = new Intent(Intent.ACTION_SYNC, null, this, KwikAPIService.class); intent.putExtra("command", KwikAPIService.GET_ORDERS_CMD); /* * Se pasa un callback (ResultReceiver), con el cual se procesará la * respuesta del servicio. Si se le pasa null como parámetro del * constructor se usa uno de los threads disponibles del proceso. Dado * que en el procesamiento del mismo se debe modificar la UI, es * necesario que ejecute con el thread de UI. Es por eso que se lo * instancia con un objeto Handler (usando el el thread de UI para * ejecutarlo). */ intent.putExtra("receiver", new KwikResultReceiver(new Handler(), this) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { super.onReceiveResult(resultCode, resultData); if (resultCode == KwikAPIService.STATUS_OK) { boolean no_data_fetched = false; @SuppressWarnings("unchecked") List<Order> orderList = (List<Order>) resultData.getSerializable("return"); populateOrders(orderList); no_data_fetched = orderList.size() == 0; if (!no_data_fetched) { ListView vi = (ListView) findViewById(R.id.listview); vi.setVisibility(View.VISIBLE); } else { View vi = (View) findViewById(R.id.textview); vi.setVisibility(View.VISIBLE); } View pg = (View) findViewById(R.id.progressbar); pg.setVisibility(View.GONE); Log.d("ORDERS", "Got Orders"); } } }); startService(intent); } protected void populateOrders(List<Order> orderList) { String[] map_fields = { "name", "id" }; String[] desired_fields = { "name" }; @SuppressWarnings("unchecked") final List<Map<String,Object>> mapped = (List<Map<String, Object>>) Util.getMapped(orderList, map_fields); int i = 0; for (Map<String, Object> map : mapped) { map.put("instance", orderList.get(i)); map.put("name", getResources().getString(R.string.order) + "#" + orderList.get(i++).id); } ListAdapter adapter = new SimpleAdapter(this, mapped, R.layout.item_list_order, desired_fields, new int[] { R.id.title }) { @Override public View getView(final int position, View convertView, ViewGroup parent) { convertView = super.getView(position, convertView, parent); convertView.findViewById(R.id.toggleButton1).setOnClickListener(new OnClickListener() { public void onClick(View arg0) { Order o = (Order) mapped.get(position).get("instance"); app.addSelectedOrder(o); } }); CheckBox cb = (CheckBox) convertView.findViewById(R.id.toggleButton1); Order o = (Order) mapped.get(position).get("instance"); for (KwikOrder order : app.getSelectedOrders()) { if(order.id == o.id) { cb.setChecked(true); break; } } return convertView; } }; ListView vi = (ListView) findViewById(R.id.listview); vi.setAdapter(adapter); } @Override public void onItemClick(AdapterView<?> view, View v, int position, long arg3) { ListView vi = (ListView) view; @SuppressWarnings("unchecked") HashMap<String, Object> map = (HashMap<String, Object>) vi.getItemAtPosition(position); Order o = (Order)map.get("instance"); app.addSelectedOrder(o); } }