2

我對Android相對比較陌生,完全停留在如何在我的自定義視圖中訪問編程定義的相對佈局(在片段中定義)中。從自定義視圖中訪問RelativeLayout時出現NullPointerException

在片段,這是我有:

... 
    @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(); 

上面的代碼顯示試圖.getText()在TextView的,但任何事情我做對的RelativeLayout也導致空指針異常。

所以基本上,它看起來像我沒有找到正確的RelativeLayout和TextViews。 僅供參考,我已經看到this similar question,但它不適用於此,我的構造函數已經正確設置。

+0

好吧,我已經添加了更多的代碼。你能給我特定的命令/文件類型來添加它嗎?是否像'view.addView(rl1)'?或者我將它添加到Fragment1的.xml文件中? – lynvie 2013-02-16 19:34:31

+1

請參閱下面的答案。如果你想保持這種動態,除了片段佈局的初始膨脹之外,xml並不真正涉及。正如我寫的,你需要投入到一個佈局,因爲'ViewView()'類未定義'addView()'。 – 2013-02-16 19:36:54

回答

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,因此您可能只需簡單介紹一下。

+1

你已經很好地理清了我的東西!不能告訴你我浪費了多少時間... – lynvie 2013-02-16 23:51:45

+0

@lynvie歡迎您:-) – 2013-02-17 00:08:24

1

你有你的相對佈局添加到您的佈局組......而從佈局的父視圖,您可以訪問您的相對佈局及其孩子的

相關問題