gpt4 book ai didi

android - 从自定义 View 访问 RelativeLayout 时出现 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 00:32:03 25 4
gpt4 key购买 nike

我是 Android 的新手,完全不知道如何在我的自定义 View 中访问我以编程方式定义的相对布局(在 fragment 中定义)。

在 fragment 中,这是我所拥有的:

...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment1, container,false);
RelativeLayout rl1 = new RelativeLayout(view.getContext());
TextView tView1 = new TextView(view.getContext());
tView1.setText("test");
rl1.addView(tView1);
rl1.setId(1);
tView1.setId(2);
...
}

然后在自定义 View 中,我通过 id 调用相关的 Layout 和 TextView。当我尝试做任何事情时,我得到一个 NullPointer 异常。

...
RelativeLayout rl1 = (RelativeLayout) findViewById(1);
TextView tView1 = (TextView) findViewById(2);
tView1.getText();

上面的代码显示尝试在 TextView 上执行 .getText(),但我对 RelativeLayout 所做的任何操作也会导致 NullPointer 异常。

基本上,看起来我没有正确找到 RelativeLayout 和 TextViews。仅供引用,我已经看过 this similar question ,但它不适用于此处,我的构造函数已正确设置。

最佳答案

您应该将布局添加到主视图,但是,您需要先将其转换为布局:

YourLayout view = (YourLayout) inflater.inflate(R.layout.fragment1, container,false);
RelativeLayout rl1 = new RelativeLayout(view.getContext());
TextView tView1 = new TextView(view.getContext());
tView1.setText("test");
rl1.addView(tView1);
rl1.setId(1);
tView1.setId(2);
view.addView (rl1);//add rl1 to the main View

然后访问,如果你在 onCreateView() 之外工作 onCreateView() has already been called:

RelativeLayout rl1 = (RelativeLayout) getView().findViewById(1);
TextView tView1 = (TextView) rl1.findViewById(2);
tView1.getText();

如果您仍在尝试访问 onCreateView() 中的 View ,findViewById() 没关系 - 您已经有了 View 的引用,因此请使用那些。

还值得注意的是,可以在 onCreateView() 中添加监听器等来更新 UI,因此您可以稍微简化一些事情。

关于android - 从自定义 View 访问 RelativeLayout 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14913973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com