2

我对 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 调用相对 Layout 和 TextView。当我尝试做任何事情时,我得到一个 NullPointer 异常。

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

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

所以基本上,看起来我没有正确找到 RelativeLayout 和 TextViews。仅供参考,我已经看到了这个类似的问题,但它不适用于这里,我的构造函数已经正确设置。

4

2 回答 2

1

您必须将您的相对布局添加到您的布局组......并且从您的布局的父视图中,您可以访问您的相对布局及其子布局

于 2013-02-16T19:12:46.987 回答
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()已经被调用:

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

如果您仍在尝试访问 中的视图onCreateView()findViewById()没关系 - 您已经拥有视图的引用,因此请使用它们。

还值得注意的是,可以添加侦听器等onCreateView()来更新 UI,因此您可以简单地做一些事情。

于 2013-02-16T19:19:11.383 回答