Android How to convert ViewStub code for ViewBinding?

108 Views Asked by At

I have a RecyclerView project with a few ViewStubs. I am converting all of the findViewByIds for the project's xml layouts over to use ViewBinding.

How do I convert my existing code for ViewStubs? I did review this stackoverflow: How to inflate a ViewStub using ViewBinding in Android but the solution there was written in Kotlin.

Example of existing code is shown below.

MainActivity(prior):

    private ViewStub onboardingViewStub;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        if (onboardingViewStub == null) {
            onboardingViewStub = findViewById(R.id.onboardingViewStub);
            onboardingViewStub.inflate();
            onboardingViewStub.setVisibility(View.VISIBLE);
        }
    }


activity_main.xml:

<androidx.coordinatorlayout.widget.CoordinatorLayout

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"  >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"  >
        ...
 
        <ViewStub
            android:id="@+id/onboardingViewStub"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout="@layout/custom_stub2" />
    </RelativeLayout>

     
custom_stub2.xml:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"  >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"    
        android:text="@string/onboarding_main_act"  />

</RelativeLayout>

MainActivity(new):

    private ActivityMainBinding binding8; 
    private CustomStub2Binding customStub2Binding; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        binding8 = ActivityMainBinding.inflate(getLayoutInflater());
        View view8 = binding8.getRoot();
        setContentView(view8);
    }
0

There are 0 best solutions below