如何从Fragment到DataBinding访问Activity视图?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从Fragment到DataBinding访问Activity视图?相关的知识,希望对你有一定的参考价值。

我的目标是从Fragment访问MainActivity的ProgressBar和TextView。但是,我收到以下错误:

尝试在空对象引用上调用虚方法'void android.widget.ProgressBar.setVisibility(int)'

activity_main.xml中

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="200dp"
            android:orientation="vertical"
            android:layout_gravity="center">

        <ProgressBar
            android:id="@+id/pbLoading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:indeterminate="true"
            android:layout_gravity="center"
            android:visibility="visible"/>

        <TextView
            android:id="@+id/tvLoading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="@dimen/dimension_8dp"
            android:fontFamily="@font/robotomedium"
            android:textSize="16sp"
            android:visibility="visible"
            android:text="@string/loading_text"/>

        </LinearLayout>

sample fragment.Java

 @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        fragmentDataBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_currency_list, container, false);

        return Objects.requireNonNull(fragmentDataBinding).getRoot();
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        mPbLoading = fragmentDataBinding.getRoot().findViewById(R.id.pbLoading);
        mPbLoading.setVisibility(View.GONE);

}

篡改了很多帖子,文章却无法实现。提前致谢。

最好,

答案

选项1

在活动上使progressbar静态,然后从片段中访问 -

if(MainActivity.progressbar!=null){
MainActivity.progressbar.setVisibility(View.Gone);
//or whatever do you want
} 

选项2

((YourActivityClassName)getActivity()).yourPublicMethod(); 

以上是关于如何从Fragment到DataBinding访问Activity视图?的主要内容,如果未能解决你的问题,请参考以下文章

Lifecycle+liveData+DataBinding三部曲

如何从 Android 中的 Fragment 访问 UI 元素?

如何从 MainActivity 中的 Fragment 访问适配器?我正在使用带有 viewpager 的标签,所以没有交易等方法

从 ViewPager Activity 访问 Fragment 的方法

从 Activity 访问 Fragment 中的视图绑定

android 自定义View 使用 DataBinding 笔记