我对Android比较陌生,完全停留在如何在我的自定义视图中访问以编程方式定义的相对布局(在片段中定义)。
在片段中,这就是我所拥有的:
...
@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);
...
}
然后在自定义视图中,我通过id调用相对布局和TextView。当我尝试做任何事情时,我得到一个NullPointer异常。
...
RelativeLayout rl1 = (RelativeLayout) findViewById(1);
TextView tView1 = (TextView) findViewById(2);
tView1.getText();
上面的代码显示在TextView上尝试.getText()
,但我对RelativeLayout做的任何事情也会导致NullPointer异常。
所以基本上,看起来我没有正确找到RelativeLayout和TextViews。 仅供参考,我已经看过this similar question,但它不适用于此,我的构造函数已经正确设置。
答案 0 :(得分:1)
您必须将您的相对布局添加到布局组...并且从布局的父视图中,您可以访问您的相对布局及其子项
答案 1 :(得分:1)
您应该将布局添加到主视图中,但是,您需要先将其转换为布局:
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()
中的观看次数,findViewById()
无关紧要 - 您已经拥有了观点的引用,请使用这些内容。
值得注意的是,可以在onCreateView()
中添加用于更新UI的监听器等,这样您就可以做一些简单的事情。