2013-01-24 27 views
23

父活動佈局如何從片段

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".LockerCodeActivity" > 

    <LinearLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </LinearLayout> 

    <ProgressBar 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:id="@+id/ctrlActivityIndicator" 
     android:indeterminateOnly="true" 
     android:keepScreenOn="false" 
    /> 

    <TextView 
     android:id="@+id/tv_results" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="" /> 

</RelativeLayout> 

充氣父活動的片段的onCreate功能

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    Fragment scannerFragment = new ScanFragment(); 
    fragmentTransaction.add(R.id.fragment_container, scannerFragment); 
    fragmentTransaction.commit(); 

工作訪問的UI元素的父活動極大那麼遠,現在我該怎麼辦隱藏進度條? 這是我已經試過

我得到一個空指針異常

回答

46

既然你想要的活動的意見,你會想這樣做:

ProgressBar progressBar = (ProgressBar) getActivity().findViewById(R.id.ctrlActivityIndicator); 

你請致電getActivity()以獲得活動實例,然後正常使用findViewById()(前提是R.id.ctrlActivityIndicator是活動佈局的一部分,則不會得到NPE)。

+1

謝謝,它的工作原理! – Matt

+1

謝謝,經過幾個小時的搜索後發現。 – LvN

+0

來自'getActivity()'的可能的NPE怎麼樣? –

2

這並沒有爲我工作unitl我將getActivity的結果投給父活動。見下面的鏈接: Call parent's activity from a fragment

+1

在回答中包含來自鏈接的相關信息是一種很好的做法。如果鏈接在未來中斷,該怎麼辦? – Theresa

+0

作爲一個拇指規則,您應該始終將getActivity()方法調用投入到它本來應該返回代碼邏輯的活動中。爲了安全地做到這一點,您可以進行鑄造檢查。下面的示例,將片段中的getActivity方法返回的活動強制轉換爲MainActivity if(getActivity instanceof MainActivity){MainActivity activity =(MainActivity)getActivity(); } – Khay