31

父活动布局

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

我得到一个空指针异常

4

3 回答 3

64

既然你想要 Activity 的视图,你会想要这样做:

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

您调用getActivity()以获取 Activity 实例,然后findViewById()正常使用(前提R.id.ctrlActivityIndicator是它是 Activity 布局的一部分,您将不会获得 NPE)。

于 2013-01-24T03:59:51.327 回答
3

这对我不起作用,我将 getActivity 的结果转换为父活动。请参阅下面的链接: 从片段中调用父级的活动

于 2015-05-16T22:22:16.603 回答
2

您可以使用:

((ParentActivity)getActivity()).UI_COMPONENT_NAME 

访问父活动的 ui 组件。

UI_COMPONENT_NAME 是在 ParentActivity 中初始化的组件的名称。

于 2019-12-08T17:28:53.490 回答