【问题标题】:Android - get the id of a parent view as laid in the activity/fragmentAndroid - 获取活动/片段中放置的父视图的ID
【发布时间】: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


    【解决方案1】:

    不是比较“id”,而是比较“views”可能会起作用。 为此,您应该初始化要比较的视图。 例如:

    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():
              ...
    
        }
     }
    

    【讨论】:

    • 我想我没有正确解释。我需要查看哪个是按钮的父级,因为不同的 waveControl 会更改信号的不同部分。从这个意义上说,我可以很容易地区分正负,但我不知道谁是父母。至少没有一个 onclicklistener。
    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多