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

  • Checkbox 'Checked' en ListView se restaura después de desplazarse
  • ListView con ScrollView horizontal
  • Android: simple_list_item_single_choice no funciona con ArrayAdapter
  • ¿Es posible obtener referencia a ListView de Adapter en Android?
  • Agregue varios textViews (de anchos variables) en relativeLayout uno tras otro
  • cómo mostrar los datos json obtenidos en listview usando baseadapter
  • Selector de lista de Android 4.0 + en el elemento de clic largo - Necesidad de ser persistente - No funciona
  • Referencia de diseño duplicada en la vista de lista
  • Cómo desactivar la selección resaltada en listview xamarin.forms en android
  • ¿Cómo establecer el menú de contexto específico en función de qué elemento se presiona de largo en un ListActivity?
  • Adaptador con hasStableIds utilizando GUID o Strings como Ids
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.