2015-09-28 64 views
0

因此,我在这里看到了几个帖子,这些帖子暗示了获取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。任何提示为什么发生这种情况将不胜感激。 谢谢

回答

0

而不是比较“ID”,比较“意见”可能会工作。 为此,您应该初始化您将比较的视图。 例如:

View minus = (View) wc1.findViewById(R.id.minus); //or wc1.minus 
switch(v){ 
     case minus: 
... 
} 

编辑: 在代码中,你是一个视图比较视图的ID。我想比较这两个id将解决你的问题。

@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 wc1.minus.getId(): 
      ... 
     case wc1.plus.getId(): 
      ... 
     case wc2.minus.getId(): 
      ... 
     case wc2.plus.getId(): 
      ... 

    } 
} 
+0

我想我没有正确地解释它。我需要查看哪个按钮的父级,因为不同的waveControls会更改信号的不同部分。从这个意义上说,我可以很容易地区分正负,但我不能说出谁是父母。至少没有一个onclicklistener。 – zelle

+0

@zelle我编辑了我的答案。 –

相关问题