Cómo usar setTag y getTag con un adaptador personalizado

Me quedo atrapado y necesito ayuda. Estoy intentando usar el sistema y conseguir la etiqueta pero no puedo conseguir cómo trabaja para esta acción:

  • Estoy usando la vista de lista para mostrar las imágenes cargadas en el adaptador extendido
  • El adaptador personalizado infla un diseño con imageview_1, textview_1 y button_1
  • En mi actividad principal, tengo un "Public Void OnClickHandler" para button_1 y fue configurado en el diseño con "android: onClick", así que cuando se hace clic en el botón hacer algo
  • Cuando se hace clic en button_1, quiero obtener el texto de textview_1 desde esa vista específica y luego cargar una imagen diferente. Quiero hacerlo usando get y set TAGS, así que necesito hacer la referencia con button_1 y imageview_1. Aquí mi código cortado. Gracias de antemano

El adaptador personalizado

@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); if (convertView == null) { convertView = mInflater.inflate(R.layout.itemstartsession, null); holder = new ViewHolder(); holder.image = (WebView)convertView.findViewById(R.id.img_session); //holder.image.setTag(position); holder.code = (TextView)convertView.findViewById(R.id.code_item_session_text); //holder.code.setTag(position); holder.share=(ImageButton)convertView.findViewById(R.id.share_item_session_button); holder.share.setTag(position); convertView.setTag(holder); // Check if my setTag is ok for button and get the reference to get //text from textview and the referece to webview, then I gonna load a url } else { holder=(ViewHolder)convertView.getTag(); } StoreDataForBA storeItem= (StoreDataForBA) getItem(position); holder.image.loadUrl(storeItem.getImage()); holder.code.setText(storeItem.getCode()); return convertView; } 

Este es mi getter y setter para los datos, muy fácil

 public StoreDataForBA( String image, String code) { this.setImage(image); this.setCode(code); } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } 

Mi actividad principal se cortó

 public void shareOnClickHandler(View v) { // plz here i need the code to get the text from textview and also get the // reference of the webview, so i can do something like // StoreDataForBA data = (StoreDataForBA)v.getTag(); // image2.loadUrl("http://image2")..... I'm not sure, thank you } 

Su código es poco confuso, así que le doy una muestra

Clase de etiqueta de ejemplo

 public class MyTag { String code; String image; String web_ref; public MyTag() { code=null; image=null; web_ref=null; } public MyTag(String cod,String img,String wref) { code=cod; image=img; web_ref=wref; } } 

Desea obtener estos valores cuando se hace clic en el botón derecho? Ponga tan este objeto de la clase de la etiqueta como etiqueta en el botón en getView de su adaptador de encargo

 MyTag myTag=new MyTag("code","image","web_ref"); holder.button.setTag(myTag); 

Ya que obtendrá la vista de clic como argumento a la función de su

 public void shareOnClickHandler(View v) { myTag=(MyTag)v.getTag(); text=myTag.code; image2.loadUrl("http://"+myTag.image);//..... I'm not sure, thank you webview.loadUrl(mytag.web_ref); } 

Creo que tienes la idea, trata de implementar tu código con esta idea

Estás muy cerca de tu respuesta. Solo sigue los cambios y completa tu respuesta

 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if ((convertView == null) || (convertView.getTag() == null)) { LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = mInflater.inflate(R.layout.list_item, null); holder = new ViewHolder(); } else { holder = (ViewHolder) convertView.getTag(); } convertView.setTag(holder); return convertView; } 

Respuesta 1:

Lo que quieres hacer:

Arriba o justo después de esta línea: holder.code.setText(storeItem.getCode()); Agregue lo siguiente: holder.share.setTag(storeItem.getCode());

Y en el onClick:

 public void shareOnClickHandler(View v) { String code = v.getTag().toString(); // plz here i need the code to get the text from textview and also get the // reference of the webview, so i can do something like // StoreDataForBA data = (StoreDataForBA)v.getTag(); // image2.loadUrl("http://image2")..... I'm not sure, thank you } 

O

Respuesta 2:

Es posible que no necesite usar setTag y getTag si hace lo siguiente

  1. Vaya a su xml y quite el atributo onclick del botón que vamos a utilizar en el Java en su lugar
  2. Utilice el siguiente getView

    @Override public View getView (posición int, View convertView, ViewGroup padre) {ViewHolder holder = null;

     LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); if (convertView == null) { convertView = mInflater.inflate(R.layout.itemstartsession, null); holder = new ViewHolder(); holder.image = (WebView)convertView.findViewById(R.id.img_session); holder.code = (TextView)convertView.findViewById(R.id.code_item_session_text); holder.share=(ImageButton)convertView.findViewById(R.id.share_item_session_button); convertView.setTag(holder); // Check if my setTag is ok for button and get the reference to get //text from textview and the reference to webview, then I gonna load a url } else { holder=(ViewHolder)convertView.getTag(); } final StoreDataForBA storeItem= (StoreDataForBA) getItem(position); // final to use inside click holder.image.loadUrl(storeItem.getImage()); holder.code.setText(storeItem.getCode()); final ViewHolder fh = holder; // it needs to be final to use inside of clicklistener holder.share.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String text = holder.code.getText().toString(); // I hope that this is what you need. String text2 = storeItem.getCode(); //use either but I prefer this. } }); return convertView; } 
  • Android ListView agrega elementos a la parte superior sin vista de lista desplácese
  • Animación de encabezados de un ListView dando ClassCastException
  • Agregar dinámicamente elementos a una listaVer Android
  • ListView.addFooterView () no funciona si no hay elementos en listview
  • Android Listview - no puede seleccionar varios elementos cuando usa un cursor
  • Android RecyclerView con SectionIndexer
  • Android lista personalizada con espacio entre los elementos
  • Cómo detectar Android ListView Scrolling se detuvo?
  • Android abriendo el menú contextual después de hacer clic en el botón
  • Listview con un adaptador personalizado que contiene CheckBoxes
  • Listview setItemChecked no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.