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.
- ListView con TextView autoLink no recibe OnItemClickListener
- ¿Cómo recuperar más de 1000 filas de Parse.com?
- Tratando de establecer una fuente personalizada para cada botón ListAdapter individual
- Error de Android - getListView () en ListFragment
- ¿Cómo puedo usar layout_weight en RecyclerView o Vista de elemento ListView para que los elementos de igual altura llenen el espacio disponible en la pantalla?
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.
- Problema al eliminar el pie de página de ListView con removeFooterView ()
- Después de buscar elementos de ListView en Android, siempre abra el primer elemento de ListView (Issue)
- Android ListView Lista de estado que no muestra el fondo del elemento predeterminado
- Android ListView con el encabezado complejo
- Android Listview mantiene los elementos antiguos después de los cambios del adaptador
- Android ListView con OnItemClickListener Y GestureDetector
- Widget de Android con ListView no carga elementos correclty
- Animar agregar / quitar elementos de ListView con CursorAdapter es posible?
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