Actualización de textview en la actividad una vez que se cambian los datos en la clase de adaptador
Tengo textview txtQuantity en mi actividad de panel. Escribí la clase separada para el adaptador de encargo que contendrá productos vendidos.
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dashboard); list = (ListView) findViewById(R.id.listSoldItems); txtAmount = (TextView) findViewById(R.id.txtAmount); txtItems = (TextView) findViewById(R.id.txtItems); // init listview adapter = new Sold_item_adaptor(Dashboard.this, soldItemsList); list.setAdapter(adapter);
Puedo quitar artículos de la lista usando el adaptador. El código para eliminar elementos se escribe en la clase del adaptador.
- Herramientas namespace android listitem
- Android ListView múltiples matrices con adaptador personalizado
- Problema en un grupo de vistas personalizado al actualizar ListViews
- Llamar a baseAdapter de Android notifyDataSetChanged () desde un método de retorno de llamada del oyente
- ¿Cómo hacer que el desplazamiento de Listview sea más lento?
public View getView(final int position, View convertView, ViewGroup parent) { View vi = convertView; if (convertView == null) vi = inflater.inflate(R.layout.list_row_sold_item, null); TextView txtListItem = (TextView) vi.findViewById(R.id.txtListItem); final TextView txtQuantity = (TextView) vi.findViewById(R.id.txtQuantity); ImageView imgCancel = (ImageView) vi.findViewById(R.id.imgCancel); HashMap<String, String> mapData = new HashMap<String, String>(); mapData = data.get(position); txtListItem.setText(mapData.get("product")); txtQuantity.setText(mapData.get("qty")); imgCancel.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { doButtonOneClickActions(txtQuantity, position); } }); return vi; } private void doButtonOneClickActions(TextView txtQuantity, int rowNumber) { // Do the actions for Button one in row rowNumber (starts at zero) data.remove(rowNumber); notifyDataSetChanged(); }
En mi actividad de tablero de mandos estoy manteniendo el número de artículos seleccionados, monto total. Ahora si quito el artículo de listview, el código del adaptador de encargo quita el artículo pero cómo puedo conseguir la notificación / señal en la actividad del tablero de mandos para poner al día cantidad.
- Uso de opengl para renderizar cada elemento en un listview en android
- Prueba de la interfaz de usuario de Android con Expresso: No hay actividades en la etapa REANUDADO
- Haga clic en el elemento de lista de un ListView no responde
- Android listview desaparece después de la rotación de la pantalla
- Android - Añadir Subitem a una vista de lista
- Sería mejor ser explícito si se requiere un buffer de 8k-char.
- ListAdapter Filtro que no sea el uso de cadenas?
- Creación de un ListView con elementos de lista personalizados mediante programación en Android - no hay ningún elemento de lista de elementos XML
Proporcionando una simple devolución de llamada.
Para que esto funcione, escriba una interfaz sencilla en su adaptador
public interface OnDataChangeListener{ public void onDataChanged(int size); }
Y añadir un setter para el oyente (también en el adaptador)
OnDataChangeListener mOnDataChangeListener; public void setOnDataChangeListener(OnDataChangeListener onDataChangeListener){ mOnDataChangeListener = onDataChangeListener; }
Ahora agrega código adicional al siguiente bloque en el adaptador
private void doButtonOneClickActions(TextView txtQuantity, int rowNumber) { ... if(mOnDataChangeListener != null){ mOnDataChangeListener.onDataChanged(data.size()); } }
En la actividad del panel de control, debe registrar el oyente
protected void onCreate(Bundle savedInstanceState) { ... adapter.setOnDataChangeListener(new Sold_item_adaptor.OnDataChangeListener(){ public void onDataChanged(int size){ //do whatever here } }); }
Eso es todo ;).
La idea principal es:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dashboard); list = (ListView) findViewById(R.id.listSoldItems); txtAmount = (TextView) findViewById(R.id.txtAmount); txtItems = (TextView) findViewById(R.id.txtItems); // init listview adapter = new Sold_item_adaptor(Dashboard.this, soldItemsList,txtAmount); list.setAdapter(adapter);
En su adaptador:
public class MyAdapter extends ArrayAdapter<SoldItemsList > { private Context context; private mTotalQty; private TextView mTxtAmountAdapter; public OfferAdapter(Context context, int resource,SoldItemsList object,TextView txtAmount ) { super(context, resource, objects); this.context = context; this.mTxtAmountAdapter = txtAmount; } //... imgCancel.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { doButtonOneClickActions(position); // update totalAmount mTxtAmountAdapter.setText(Integer.valueOf(totalAmount).toString())); } }); imgPlus.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { qtyClickAction(position); // update totalQty mTxtAmountAdapter.setText(Integer.valueOf(totalAmount).toString())); } });
Anule notifyDataSetChanged () en su clase de adaptador … y haga lo que quiera …
@Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); // Your code to nofify }
Según entiendo la pregunta, usted está interesado en una forma de actualizar la interfaz de usuario fuera del adaptador después de doButtonOneClickActions ();
La forma más sencilla sería utilizar https://github.com/greenrobot/EventBus
Los ejemplos se pueden encontrar aquí http://awalkingcity.com/blog/2013/02/26/productive-android-eventbus/
Si no desea hacer esto, puede crear una devolución de llamada http://android-er.blogspot.dk/2013/09/implement-callback-function-with.html
- La aplicación de Android tiene una marca de exclamación roja en Eclipse después de importar la biblioteca de Facebook
- Android Webview Javascript – Referencias a secuencias de comandos no funcionan