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.

 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.

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

  • Cómo hacer clickable en toda la fila de la vista de lista?
  • ¿Hay una manera de desactivar / editar el desvanecimiento que una vista de lista tiene en sus bordes?
  • Realizar adapter.notifyDataSetChanged () fuera de un fragmento
  • ArrayAdapter - filtrado con múltiples términos de búsqueda
  • Android: ¿Obtener la altura del elemento ListView?
  • Horizontal RecyclerView dentro de ListView sin desplazamiento muy suave
  • Cómo mostrar el tamaño del archivo en vista de lista con nombre de archivo
  • ¿Cómo crear un spinner con título en él?
  • Ninepatch escala incorrecta al desplazarse después de aplicar un filtro de color?
  • Obtener el elemento seleccionado y su posición en RecyclerView
  • Desactivar el selector Android ListView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.