如何使用View的setTag,getTag findViewWithTag和方法

发布网友 发布时间:2022-04-23 15:37

我来回答

2个回答

热心网友 时间:2022-07-15 06:28

用于区分很多相似的View

例如:

button1.setOnClickListener(new OnClickListener ... );  
button2.setOnClickListener(new OnClickListener ... );

可能执行相似的逻辑,但必须分别为两个Button设置两个的OnClick事件,

public void onClick(View v) {  
    doAction(1); // 1 for button1, 2 for button2, etc.  
}

之所以这样做,因为onClick只有一个参数View。可以通过setTag和getTag来完成:

button1.setTag(1);  
button2.setTag(2);

可以将两个button设置同一个OnClickListener,比如:

listener = new OnClickListener() {  
    @Override  
    public void onClick(View v) {  
        doAction(v.getTag());  
    }  
};

这样,就能够通过getTag区分。

用于ListView的复用
写自定义adapter的时候,通常会使用它,比如:

static class ViewHolder {  
    TextView tvPost;  
    TextView tvDate;  
    ImageView thumb;  
}  
  
public View getView(int position, View convertView, ViewGroup parent) {  
  
    if (convertView == null) {  
        LayoutInflater inflater = myContext.getLayoutInflater();  
        convertView = inflater.inflate(R.layout.postitem, null);  
  
        ViewHolder vh = new ViewHolder();  
        vh.tvPost = (TextView)convertView.findViewById(R.id.postTitleLabel);  
        vh.tvDate = (TextView)convertView.findViewById(R.id.postDateLabel);  
        vh.thumb = (ImageView)convertView.findViewById(R.id.postThumb);  
        convertView.setTag(vh);  
    }  
            ....................  
}

注意:除了上述情况以外,尽量不要直接使用,原因:

一、代码可读性:会给其他的程序员造成困扰

二、由于setTag和getTag设置的是一个Object对象,可能会出现类的转换异常

不过,android4.0以后,有一个更好的方法:setTag(int
key, Object tag)可以通过类似<k,v>键值对的方式存取。

热心网友 时间:2022-07-15 06:28

1. 此行是您的罪魁祸首的一部分:
com.jacksmartie.PhotoMem.MainActivity$1.onItemClick(MainActivity.java:79)

把断点的位置:
Log.d("View 1", imageView.toString());

并期待您的ImageView参考对象[ImageView的],我期待什么,这是一个空没有链接了正常。
如果为null,那你的链接到参考的观点是不正确的。如果多数民众赞成的话,那么你需要将其正确地分配喜欢跳:
Button b = findViewById(R.id.Button01);

然而,由于“什么似乎是列表视图,那拉动略有不同。那你拉视图的方式是错误的 CodeGo.net,背上的研究,应该找帮助清除了!
祝你好运!
JOX
+
2.
那么,这些愿望在哪里它的崩溃。并且它不是清楚自己在做什么。
public View getView(int position, View view, ViewGroup parent) {
imageView.setTag(position);
return imageView;

在哪里imageView自称?什么是它设置为?
private OnItemClickListener itemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
ImageView imageView;
//Variable i, here, is from a for loop.
imageView = (ImageView)v.findViewWithTag(i);

你声明称为第二局部变量imageView在这里,击打它会消失,当你退出范围。如果你依靠此设置为您的imageView变量,你不喜悦。i是从for循环,但如何与本position在getView()方法?
+
3.
对空指针发生在ImageView的variabkle是空的,因为findviewbyid没有找到视图,跳如果一个复选标记,如果它是空的,因为它没有Android的日志不能打印,而不是设置标签的空变量,尝试设置ID这样做
imageView.setId(正电子);
如果我理解正确,做的ID在adapter和自生成视图它并没有一个默认。
该标签是推杆所需要的视图它的自我作为一个辅助变量visely它的对象:)
如果你明确需要那么标记检查视图实际上是存在的,这意味着你是不是重新检查写入标签一路上

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com