Botón de Android en el elemento ListView para cambiar el texto en la misma fila
Tengo una lista de vista que configurar mediante el uso de un listAdapter personalizado. Hay un botón en cada elemento listView para cambiar el textView en la misma fila. ¿Cómo puedo hacerlo? Aquí es parte del código:
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; final int _position = position; if (convertView == null) { convertView = l_Inflater.inflate(R.layout.activity_today_sales_list_view, null); holder = new ViewHolder(); holder.txt_itemName = (TextView) convertView.findViewById(R.id.itemNameTB); holder.txt_itemPrice = (TextView) convertView.findViewById(R.id.priceTB); holder.txt_plusBtn = (Button) convertView.findViewById(R.id.addBtn); holder.txt_minusBtn = (Button) convertView.findViewById(R.id.minusBtn); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.txt_plusBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("Plus Btn", "Clicked"); } }); holder.txt_minusBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Log.d("Minus Btn", "Clicked"); } }); holder.txt_itemName.setText(itemDetailsrrayList.get(position).getItemName()); holder.txt_itemPrice.setText(itemDetailsrrayList.get(position).getItemCost()); return convertView; }
- Android - FirebaseListAdapter en orden inverso?
- Cómo deshabilitar un elemento secundario en un listview (hacer su color gris y unclickable)
- Obtener lista de cuentas en android
- Lista de reproducción de Youtube mostrada en ListView
- Android Listview imagen de fondo muestra en cada fila, ¿por qué?
- Android listview primera posición visible
- Elementos de ListView que no se pueden hacer clic con HorizontalScrollView dentro
- Error: java.lang.IndexOutOfBoundsException: Índice 2 no válido, tamaño es 2
- Listview items Animación Parar mientras se desplaza
- Llamar al método setEmpty de ListView no funciona (no se muestra nada cuando la lista está vacía)
- ¿Cómo saber qué elemento de la lista es visible para el usuario?
- añadir elementos en la parte superior de la vista de lista android
- Android ListView Ir a la posición del cursor
Puede utilizar el código a continuación para solucionar el problema.
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = l_Inflater.inflate(R.layout.activity_today_sales_list_view, null); holder = new ViewHolder(); holder.txt_itemPrice = (TextView) convertView.findViewById(R.id.priceTB); holder.txt_plusBtn = (Button) convertView.findViewById(R.id.addBtn); holder.txt_plusBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ViewHolder holder1 = (ViewHolder)v.getTag(); //Access the Textview from holder1 like below holder1.txt_itemPrice.setText("Plus"); } }); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.txt_plusBtn.setTag(holder); holder.txt_itemPrice.setText(itemDetailsrrayList.get(position).getItemCost()); return convertView; }
establezca los identificadores de Button y TextView que puede diferenciar cuando se hace clic en el botón. Lo que quiero decir es .. supongamos que tiene 10 elementos que se van a mostrar en un listview para getView()
método recibirá la position
van de 0 a 9. Así que lo que puede hacer aquí se establece id de botones como 10+position
y que de TextViews como 1000+position
o cualquier número aleatorio. Así que cuando se hace clic en un botón, puede obtener el id de él, restando 10 de él. Ahora agregue 1000 a él para obtener el TextView y cambiar su texto.
Aquí está mi propio ejemplo que ilustra cómo usar el onClickListener
correctamente dentro de un Adapter
. La funcionalidad es casi la misma que usted. Tengo una lista de productos y dentro de mi lista de artículos, el usuario puede aumentar o disminuir la cantidad de artículos comprados.
Mi objeto de artículo que posee las propiedades del elemento. Tiene una identificación, un nombre y una orden que se refiere al número de veces que se ha comprado este artículo:
public class MenuItem { private int id; private String name; private int order = 0; public MenuItem(int id, String name) { super(); this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getOrder() { return order; } public void setOrder(int order) { this.order = order; } }
Aquí hay un fragmento de mi Adapter
que contiene una lista de MenuItems. La interfaz de usuario contiene un botón de imagen arriba y abajo junto con el nombre.
@Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { LayoutInflater lInflater = ((Activity) mContext).getLayoutInflater(); convertView = lInflater.inflate(R.layout.menu_item, parent, false); holder = new ViewHolder(); holder.name = (TextView) convertView.findViewById(R.id.menu_name); holder.details = (TextView) convertView.findViewById(R.id.menu_details); holder.counter = (TextView) convertView.findViewById(R.id.menu_counter); holder.up = (ImageView) convertView.findViewById(R.id.menu_up); holder.down = (ImageView) convertView.findViewById(R.id.menu_down); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.name.setText(getMenuList().get(position).getName()); holder.details.setText(getMenuList().get(position).getDetails()); holder.counter.setText(String.valueOf(getMenuList().get(position).getOrder())); holder.up.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onListItemClick(position, UP); } }); holder.down.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onListItemClick(position, DOWN); } }); return convertView; } protected void onListItemClick(int position, int direction) { int numberOfOrders = getMenuList().get(position).getOrder(); if (direction == DOWN && numberOfOrders == 0) { // Don't go negative! return; } getMenuList().get(position).setOrder(numberOfOrders + direction); // in your case: itemDetailsrrayList.get(position).setOrder(...); notifyDataSetChanged(); }
¡Que te diviertas!
Prueba esto
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; final int _position = position; if (convertView == null) { convertView = l_Inflater.inflate(R.layout.activity_today_sales_list_view, null); holder = new ViewHolder(); holder.txt_itemName = (TextView) convertView.findViewById(R.id.itemNameTB); holder.txt_itemPrice = (TextView) convertView.findViewById(R.id.priceTB); holder.txt_plusBtn = (Button) convertView.findViewById(R.id.addBtn); holder.txt_minusBtn = (Button) convertView.findViewById(R.id.minusBtn); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.txt_plusBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("Plus Btn", "Clicked"); holder.txt_itemName.setText("Your String"); holder.txt_itemPrice.setText("Your String"); } }); holder.txt_minusBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Log.d("Minus Btn", "Clicked"); holder.txt_itemName.setText("Your String"); holder.txt_itemPrice.setText("Your String"); } }); holder.txt_itemName.setText(itemDetailsrrayList.get(position).getItemName()); holder.txt_itemPrice.setText(itemDetailsrrayList.get(position).getItemCost()); return convertView; }
Espero que esto ayude.