Как использовать setTag и getTag с пользовательским адаптером

Я застрял, и мне нужна помощь. Я пытаюсь использовать set и get Tag, но я не могу понять, как это работает для этого действия:

  • Я использую представление списка для отображения изображений, загруженных в расширенный адаптер
  • Пользовательский адаптер раздувает макет с помощью imageview_1, textview_1 и button_1
  • В моей основной деятельности у меня есть «Public Void OnClickHandler» для button_1 и был сконфигурирован при компоновке с «android: onClick», поэтому, когда кнопка нажата, она делает что-то
  • Когда нажимается кнопка_1, я хочу получить текст из textview_1 из этого конкретного представления, а затем загрузить другое изображение. Я хочу это сделать с помощью get и set TAGS, поэтому мне нужно сделать ссылку с помощью кнопок button_1 и imageview_1. Здесь мой отрезанный код. заранее спасибо

Пользовательский адаптер

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

Это мой getter и setter для данных, очень легкий

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

Моя основная деятельность

 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 } 

Solutions Collecting From Web of "Как использовать setTag и getTag с пользовательским адаптером"

Ваш код немного запутан, поэтому я даю вам образец

Класс образцов

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

Вы хотите получить эти значения при нажатии кнопки справа? Поэтому поместите этот объект класса тега как тег на кнопку в getView вашего пользовательского адаптера

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

Так как вы получаете представление, нажатое как аргумент для вашей функции

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

Я думаю, вы поняли, попытайтесь реализовать свой код с этой идеей

Вы очень близки к своему ответу. Просто выполните изменения и выполните свой ответ.

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

Ответ 1:

Что вы хотите сделать:

Выше или справа после этой строки: holder.code.setText(storeItem.getCode()); Добавьте следующее: holder.share.setTag(storeItem.getCode());

И в 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 } 

Или

Ответ 2:

Вам может не понадобиться использовать setTag и getTag если вы выполните следующее

  1. Перейдите в свой xml и удалите атрибут onclick из кнопки, которую мы будем использовать в Java вместо этого.
  2. Используйте следующий getView

    @Override public View getView (int position, View convertView, родитель ViewGroup) {Держатель ViewHolder = 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; }