如何使用View的setTag,getTag findViewWithTag和方法
展开全部
用于区分很多相似的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>键值对的方式存取。
展开全部
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它的对象:)
如果你明确需要那么标记检查视图实际上是存在的,这意味着你是不是重新检查写入标签一路上
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它的对象:)
如果你明确需要那么标记检查视图实际上是存在的,这意味着你是不是重新检查写入标签一路上
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询