在上面的许多级别访问父级视图

时间:2014-04-07 13:16:16

标签: android findviewbyid rootview

我有一个linearlayout,它包含我想要访问的TextView。 在此线性布局中,有一个列表视图,其中每个项目都是线性布局,并且还包含自定义视图。

深入有一个onclickListener的按钮。执行onClick()后,我想调用一个设置textview文本的方法。 目前我这样做:

(View)this.getParent().getParent().getParent().getParent().getParent().getParent().getParent().findViewById(R......)

它有效,但看起来很糟糕。有没有可能做得更好?

Image

2 个答案:

答案 0 :(得分:1)

它看起来很糟糕,因为对于一个人来说,了解一些关于自我的东西通常是一个坏主意。因此,了解您的孩子可能还可以,但不能回来。

您最好不要让视图像视图一样简单,没有任何其他逻辑。在活动/片段

中做你的逻辑

请参阅Circular dependency

答案 1 :(得分:1)

是的,它的丑陋,不要那样做。

通过询问包含布局的活动,在onClick(View v)抓住TextView

@Override
public void onClick(View v) {
    TextView tv = (TextView) YourActivity.this
        .findViewById(R.id.your_text_view_id);
    tv.setText("blabla");
}

如果你从片段而不是活动使用它:

YourFragment.this.getView().findViewById(R.id.your_text_view_id) 

或者只是创建一个成员TextView mTv,在#OnCreate中对其进行初始化,并按照您对问题的评论中的建议将其用于任何地方