setonLongClick 中的 view.getTag 无法获取
时间: 2024-02-10 22:10:33 浏览: 25
如果在 setOnLongClickListener 中无法获取 view 的 tag,可能是因为在设置 tag 的时候使用了错误的 key 值,或者在获取 tag 的时候使用了错误的 key 值。请确保在设置 tag 的时候使用的是正确的 key 值,例如:
```
view.setTag(R.id.key_tag, yourTag);
```
然后在获取 tag 的时候也要使用相同的 key 值,例如:
```
Object tag = view.getTag(R.id.key_tag);
```
如果仍然无法解决问题,请检查一下 view 是否为空,或者在设置 tag 的时候是否正确地将 tag 对象赋值给了 view。
相关问题
view = convertView; viewHolder= (ViewHolder) view.getTag();详解
在 Android 中开发 ListView 或 RecyclerView 时,为了提高列表的滑动流畅度和性能表现,通常会采用 ViewHolder 模式。ViewHolder 是一个用于保存 convertView 中子 View 的对象,可以通过 view.setTag() 方法将其与 convertView 绑定起来。在 getView() 或 onCreateViewHolder() 方法中,如果 convertView 不为 null,则可以直接使用 convertView,并调用 getTag() 方法获取 ViewHolder 对象,避免频繁地调用 findViewById() 方法。这样可以大大减少 UI 线程的工作量,提高应用的性能表现。
具体实现步骤如下:
1. 在 Adapter 中定义 ViewHolder 类,用于保存 convertView 中子 View 的对象。
```java
class ViewHolder {
TextView title;
ImageView icon;
}
```
2. 在 getView() 或 onCreateViewHolder() 方法中,通过 convertView 和 ViewHolder 实现优化。
```java
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false);
viewHolder = new ViewHolder();
viewHolder.title = convertView.findViewById(R.id.title);
viewHolder.icon = convertView.findViewById(R.id.icon);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// 设置子 View 的数据
viewHolder.title.setText(getItem(position).getTitle());
viewHolder.icon.setImageResource(getItem(position).getIconResId());
return convertView;
}
```
在上述代码中,如果 convertView 不为 null,则通过 convertView.getTag() 方法获取 ViewHolder 对象,否则创建新的 convertView 和 ViewHolder 对象,并将其绑定起来,最后设置子 View 的数据并返回 convertView。
这样,就可以通过 ViewHolder 模式优化列表的性能表现。
view.settag
view.setTag()是一个方法,用于在Android中设置视图的标记。可以使用setTag()方法将任何类型的对象与视图相关联,以便在需要时可以检索该对象。这个标记通常用于存储有关视图的信息,例如在ListView中存储行号或在ImageView中存储图像路径等。通过调用view.getTag()方法可以检索与视图关联的标记。