2012-08-30 65 views
1

我在寫一個計算器應用程序,我希望能夠在4種計算模式之間切換:十進制,二進制,八進制和十六進制。爲了管理不同模式的不同用戶界面,我的Activity中有4個片段子類。除了Activity的主XML文件外,每個Fragment都有自己的XML佈局文件。我在Android Developer網站上找到了一個用於擴展Fragments佈局的指南,並且我遵循了該指南。不過,我想將偵聽器等添加到佈局的各種組件中,最好在片段的onCreateLayout方法中,或者其他可以輕鬆實現並最大限度地減少代碼重複的位置。動態碎片中的佈局

然而,當我嘗試調用findViewByID來訪問其中一個膨脹視圖(顯然在我調用LayoutInflater.inflate之後)時,我得到一個空返回值。無論我在onCreateLayout中還是從Activity中的其他位置(理論上已創建Views之後)調用findViewByID,都會發生此問題。這裏有什麼問題?

我認爲可能是一個問題的一個問題是,我已經重載了各種片段佈局之間的視圖的名稱。例如,二進制佈局中的「1」按鈕與十六進制佈局中的「1」按鈕具有相同的ID。這是否允許,假設二進制和十六進制佈局從來都不是同一時間的活動的一部分?

謝謝。

回答

1

我覺得在不同的佈局中相同的id在Fragement中不是問題。首先,你必須抓住膨脹的視圖,然後找到裏面的東西。例如 -

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

    view = inflater.inflate(R.layout.frg1, container, false); 
    android.util.Log.v("", "!!!!!!!!!! Frg1 !!!!!!!!!"); 


    Button b = (Button) view.findViewById(R.id.b1); 
    b.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) { 
      Toast.makeText(getActivity(), "here", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    return view; 
} 
+0

是的,這樣做。我很愚蠢,在Activity上調用findViewById,而不是在碎片樹的根上。傻我。謝謝! – Ertai87

+0

wc @ user1622825 –

+0

你能投票給我嗎?也請標記正確,因爲這是正確的答案。 –