如何从片段访问父活动中的UI元素

父母活动布局

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

目前为止工作得很好……现在我该如何隐藏进度条? 这是我试过的

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_scan, container, false); ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.ctrlActivityIndicator); progressBar.setVisibility(View.INVISIBLE); return view; } 

我得到一个空指针exception

Solutions Collecting From Web of "如何从片段访问父活动中的UI元素"

既然你想要活动的意见,你会想要这样做:

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

您可以调用getActivity()来获取Activity实例,然后像正常一样使用findViewById() (假定R.id.ctrlActivityIndicator是Activity布局的一部分,您将不会得到NPE)。

这不适合我unitl我把getActivity的结果投给父活动。 请参阅下面的链接: 从一个片段调用父母的活动