【发布时间】:2015-12-25 16:32:37
【问题描述】:
因此,我在这里看到了几篇帖子,这些帖子表明,在 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 以根据单击/更新的 WaveControls 应用过滤器。但是即使我实现了上面的代码,我也会得到不同的 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 转换为 View 不会让您获得片段中放置的视图的实际 id。任何提示为什么会发生这种情况将不胜感激。
谢谢
【问题讨论】:
标签: android view casting onclicklistener parent