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; } 

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.

  • State_activated en pre Honeycomb Devices
  • Android ListView - pequeña línea entre los elementos
  • Android ListView Deslizar hacia la derecha y hacia la izquierda para aceptar y rechazar
  • Poner un anuncio nativo de AdMob en una listaVer
  • ¿Puedo cambiar el estilo de ListView Android sin crear listview personalizado?
  • Cómo enumerar todos los archivos y carpetas que se encuentran en la tarjeta sd
  • Uso del selector de un diseño para cambiar las propiedades de su hijo
  • Error al agregar nuevos datos a ListView con ArrayAdapter
  • El ListView de fondo se vuelve negro al desplazarse
  • ¿Utilizar un ListView para crear una pantalla de configuración en Android?
  • Android ListView: detecta si los datos de ListView se ajustan a la pantalla sin desplazarse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.