通过获取图像视图的标签位置来设置图像资源 android
Setting image resourse by obtaining tag position for an imageview android
我正在使用回收站视图。我有一个以浅红色突出显示的布局,回收站视图中的每个项目都包含此布局。浅红色布局放置在背景图像上。我正在使用 setTag 方法来识别红色布局中按钮的点击。当我点击我得到这个位置时,它工作正常。问题是我想在特定位置更改图像。
例如:考虑心脏按钮。我已经在上面设置了标签。
heartButton = findViewById(id);
heartButton.setTag(位置);
现在我使用 getTag 方法获取位置。但是现在我想在特定位置更改 heartButton 的图像。有没有类似
heartButton.getTag(位置).setImageResouce(drawable);
如果不是我该怎么做。
使用setBackgroundResource(R.drawable.XXX)
http://developer.android.com/reference/android/view/View.html#setBackgroundResource(int)
正确的做法是,
您必须将心脏按钮的状态存储在传递给自定义适配器的模型 (POJO) 中。
例如
class ModelListItem{
public static final int HEART=1,BROKEN_HEART=2;
int heartButtonState;
}
现在在心形按钮的 onClick() 中,使用位置从适配器获取该对象,考虑到您已经弄清楚如何保留心形按钮的位置
ModelListItem item = (ModelListItem)adapter.getItem(position)
更改心形按钮的状态;
item.setHeartButtonState(ModelListItem.BROKEN_HEART);
adapter.notifyDatasetChanged();
您已经知道下面的解释,但以防万一
为了正常工作,在适配器的 getView 方法中,您需要检查 heartButtonState();并使用合适的图片资源。
getView(BOILERPLATE){
BOILERPLATE
switch(item.getheartButtonState()){
case ModelItemList.HEART:
heartbutton.setImageResource(heart_image);
break;
case ModelItemList.BROKEN_HEART:
heartbutton.setImageResource(broken_heart_image);
break;
}
我制作了一个自定义点击监听器并更新了 setter getter.But 这仅在视图已移出视图时有效(我认为它是 scrapeview)
SetterGetterClass
public class DemoData {
int background;
boolean liked;
public DemoData(int background) {
this.background = background;
}
public int getBackground() {
return background;
}
// public void setBackground(int background) {
// this.background = background;
// }
public boolean isLiked() {
return liked;
}
public void setLiked(boolean liked) {
this.liked = liked;
}
}
回收视图的onBindViewHolder函数
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
background = (ImageView) holder.view.findViewById(R.id.image);
layout = (LinearLayout) holder.view.findViewById(R.id.layout);
delete = (ImageView) layout.findViewById(R.id.delete);
lock = (ImageView) layout.findViewById(R.id.lock);
delete.setTag("delete_"+position);
lock.setTag("lock_"+position);
if(Constants.demoDatas.get(position).isLiked()){
delete.setImageResource(R.drawable.ic_launcher);
}
else{
delete.setImageResource(android.R.drawable.ic_delete);
}
delete.setOnClickListener(new CustomClickListener(position));
lock.setOnClickListener(new CustomClickListener(position));
}
自定义点击监听如下
public class CustomClickListener implements View.OnClickListener {
int position;
public CustomClickListener(int position) {
this.position = position;
}
@Override
public void onClick(View v) {
String tag = (String) v.getTag();
String identifier[] = tag.split("_");
// this line saves my state in the Setter Getter Class
Constants.demoDatas.get(position).setLiked(true);
}
}
我正在使用回收站视图。我有一个以浅红色突出显示的布局,回收站视图中的每个项目都包含此布局。浅红色布局放置在背景图像上。我正在使用 setTag 方法来识别红色布局中按钮的点击。当我点击我得到这个位置时,它工作正常。问题是我想在特定位置更改图像。 例如:考虑心脏按钮。我已经在上面设置了标签。
heartButton = findViewById(id); heartButton.setTag(位置);
现在我使用 getTag 方法获取位置。但是现在我想在特定位置更改 heartButton 的图像。有没有类似
heartButton.getTag(位置).setImageResouce(drawable);
如果不是我该怎么做。
使用setBackgroundResource(R.drawable.XXX)
http://developer.android.com/reference/android/view/View.html#setBackgroundResource(int)
正确的做法是, 您必须将心脏按钮的状态存储在传递给自定义适配器的模型 (POJO) 中。 例如
class ModelListItem{
public static final int HEART=1,BROKEN_HEART=2;
int heartButtonState;
}
现在在心形按钮的 onClick() 中,使用位置从适配器获取该对象,考虑到您已经弄清楚如何保留心形按钮的位置
ModelListItem item = (ModelListItem)adapter.getItem(position)
更改心形按钮的状态;
item.setHeartButtonState(ModelListItem.BROKEN_HEART);
adapter.notifyDatasetChanged();
您已经知道下面的解释,但以防万一 为了正常工作,在适配器的 getView 方法中,您需要检查 heartButtonState();并使用合适的图片资源。
getView(BOILERPLATE){
BOILERPLATE
switch(item.getheartButtonState()){
case ModelItemList.HEART:
heartbutton.setImageResource(heart_image);
break;
case ModelItemList.BROKEN_HEART:
heartbutton.setImageResource(broken_heart_image);
break;
}
我制作了一个自定义点击监听器并更新了 setter getter.But 这仅在视图已移出视图时有效(我认为它是 scrapeview)
SetterGetterClass
public class DemoData {
int background;
boolean liked;
public DemoData(int background) {
this.background = background;
}
public int getBackground() {
return background;
}
// public void setBackground(int background) {
// this.background = background;
// }
public boolean isLiked() {
return liked;
}
public void setLiked(boolean liked) {
this.liked = liked;
}
}
回收视图的onBindViewHolder函数
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
background = (ImageView) holder.view.findViewById(R.id.image);
layout = (LinearLayout) holder.view.findViewById(R.id.layout);
delete = (ImageView) layout.findViewById(R.id.delete);
lock = (ImageView) layout.findViewById(R.id.lock);
delete.setTag("delete_"+position);
lock.setTag("lock_"+position);
if(Constants.demoDatas.get(position).isLiked()){
delete.setImageResource(R.drawable.ic_launcher);
}
else{
delete.setImageResource(android.R.drawable.ic_delete);
}
delete.setOnClickListener(new CustomClickListener(position));
lock.setOnClickListener(new CustomClickListener(position));
}
自定义点击监听如下
public class CustomClickListener implements View.OnClickListener {
int position;
public CustomClickListener(int position) {
this.position = position;
}
@Override
public void onClick(View v) {
String tag = (String) v.getTag();
String identifier[] = tag.split("_");
// this line saves my state in the Setter Getter Class
Constants.demoDatas.get(position).setLiked(true);
}
}