2013-01-24 8 views
23
układu aktywność

rodzicjak uzyskać dostęp do elementów interfejsu użytkownika w działalności macierzystej z fragmentem

<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> 

nadmuchania fragmentu w działalności macierzystej onCreate funkcji

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

działa doskonale do tej pory ... teraz jak mogę ukryć pasek postępu? To co próbowałem

otrzymuję wyjątku null pointer

Odpowiedz

46

Ponieważ chcesz widoki aktywności użytkownika, będziesz chciał to zrobić:

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

Ty zadzwoń pod numer getActivity(), aby uzyskać instancję Działanie, a następnie normalnie używaj findViewById() (pod warunkiem, że R.id.ctrlActivityIndicator jest częścią układu Aktywności, nie otrzymasz NPE).

+1

Dzięki, to działa! – Matt

+1

Dzięki, znalazłem to po godzinach poszukiwań. – LvN

+0

Co z możliwym NPE z 'getActivity()'? –

2

To nie działało dla mnie unitl i rzutuję wynik działania getActivity na aktywność rodzica. Zobacz link poniżej: Call parent's activity from a fragment

+1

Dobrze jest dołączyć odpowiednie informacje z linku do swojej odpowiedzi. Co się stanie, jeśli link się zepsuje w przyszłości? – Theresa

+0

Jako regułę kciuka należy zawsze rzutować wywołanie metody getActivity() na działanie, które rzekomo powraca jako logika kodu. I aby to zrobić, dokonaj sprawdzenia przed odlewem. Przykład poniżej, aby rzucić działanie zwrócone przez metodę getActivity wewnątrz fragmentu do MainActivity , jeśli (getActivity instanceof MainActivity) { MainActivity activity = (MainActivity) getActivity(); } – Khay

Powiązane problemy