在我的类的onCreate()方法中,我创建了一个按钮网格,并给它们标记以识别它们,例如:
button.setTag("one four");
这很好用。现在我想在方法中创建一个新的临时按钮,我正在使用这段代码:
String s = "one four";
Object o = s;
View view = new View(this);
Button button = (Button)view.findViewWithTag(o);
但按钮总是显示为“null”。我不知道为什么。
答案 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}}