2017-12-25 10 views
0

Mein Ziel ist es, von einem Fragment auf die ProgressBar und TextView von MainActivity zuzugreifen. Allerdings erhalte ich den Fehler unten:Zugriff auf Aktivitätsansichten von Fragment bis DataBinding?

Versuch virtuelle Methode 'Leere android.widget.ProgressBar.setVisibility (int)' auf ein Null-Objekt aufzurufen Referenz

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> 

SampleFragment.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); 

} 

Manipuliert mit vielen Posts, Artikel aber konnte es nicht erreichen. Danke im Voraus.

Best,

Antwort

1

Option 1

make progressbar statisch auf Aktivität und dann von Fragment zugreifen wie -

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

Option 2

((YourActivityClassName)getActivity()).yourPublicMethod(); 
+0

Dies wäre wirklich ein schlechter Ansatz. Wo ist OOP? – nuhkoca

+0

dann Ereignisbus verwenden. Es ist ein Publisher-Abonnentenmuster oder eine aktualisierte Antwort –