因此,我在这里看到了几个帖子,这些帖子暗示了获取Android中任何子视图的父视图的id的最佳解决方案是之类的:Android - 获取活动/片段中的父视图的ID
View parent = (View)child.getParent();
int id = parent.getId();
不幸的是,这在我的情况下不起作用。我有一个自定义ViewGroup(扩展FrameLayout)与2个按钮,一个textView和一个酒吧,需要按钮点击更新。
class WaveControl extends FrameLayout{
Button minus;
Button plus;
ExpandingBar bar; //simple view that only draws a color(need for indication purposes)
int counter;
}
扩展栏需要按钮点击动画,我有方法,照顾在WaveControl内。我也有一个有五个WaveControls的片段,我需要在片段中实现一个onClickListener,以根据哪个WaveControl被点击/更新来应用滤镜。但即使我实现上述代码,我得到不同的ID,即在:
WaveControl wc1; // (in xml id is field_1)
WaveControl wc2; // (in xml if is field_2)
WaveControl wc3; //...
WaveControl wc4; //...
wc1.minus.setOnclickListener(this);
wc2.plus.setOnclickListener(this);
.... //this for every button
@Override
public void OnClick(View v){
View parent = (View)v.getParent();
int id = parent.getId();
Log.i(TAG, "view id: "+ id +" wc1 id: " + field1.getId());
switch(v.getId()){
case R.id.minus:
...
}
}
输出是:I/WaveFragment﹕ view id: -1 wc1 id: 2131624083
显然,这不能成为我当这是被点击视图的指标。 我已经想出了一个解决方法,为每个waveControl字段创建几个onClickListeners,但它看起来并不像完美的解决方案。 仍然存在这样的问题:将ViewParent投射到视图将不会获得放置在片段中的视图的实际ID。任何提示为什么发生这种情况将不胜感激。 谢谢
我想我没有正确地解释它。我需要查看哪个按钮的父级,因为不同的waveControls会更改信号的不同部分。从这个意义上说,我可以很容易地区分正负,但我不能说出谁是父母。至少没有一个onclicklistener。 – zelle
@zelle我编辑了我的答案。 –