通过findViewWithTag检索按钮不起作用?

时间:2012-01-26 15:39:45

标签: java android

在我的类的onCreate()方法中,我创建了一个按钮网格,并给它们标记以识别它们,例如:

button.setTag("one four");

这很好用。现在我想在方法中创建一个新的临时按钮,我正在使用这段代码:

String s = "one four";
Object o = s;
View view = new View(this);
Button button = (Button)view.findViewWithTag(o); 

但按钮总是显示为“null”。我不知道为什么。

4 个答案:

答案 0 :(得分:9)

您必须在view.addChild(button);

之前致电view.findViewWithTag(o);

你不需要这样做Object o = s;view.findViewWithTag(s);也会这样做。

View view = new View(this); - 您创建了View的新实例。 对象view没有任何子节点。您必须从包含findViewWithTag(s)对象的布局调用Button方法。

答案 1 :(得分:1)

尝试不将字符串赋值给对象变量,并将标记直接设置为字符串。

答案 2 :(得分:0)

Mavix,findViewWithTag遍历所有子视图,并在ViewGroup中正常工作。试试这个:

// after button.setTag("one four");

ViewGroup v = (ViewGroup) findViewById(R.id.myFirstLayoutIdInXmlLayoutFile); 
Button b = (Button) v.findViewWithTag("one four");

答案 3 :(得分:0)

我有同样的疑问。在我的情况下,我有一个主布局和一个辅助布局(在主要内部) - 两个是RelativeLayout& - 我想得到我在屏幕上添加的组件。

但我必须使用动态密钥(可以重复),这是我可以用来识别组件的唯一参数。

像Natali一样,在response中,我使用" TAG"在组件中并为我工作。见下文(以Button为例):

第1步:声明按钮类型变量。 String any_key = "keyToGetButton";; //这是我的活动的上下文

第2步:设置任意键。 btn.setTag(any_key);

第3步:将标记(在步骤2中设置的键)设置为您的按钮。 Button button = (Button) your_layout_where_is_button.findViewWithTag(any_key);

第4步:按标记获取按钮(例如,在其他方法中)。 {{1}}