I am creating an Android application where I want to switch the visibility of some view elements based on a button click. I am trying to archive it with data binding instead of using findViewById (), but all the solutions that I have found so far do not update the layout when the variable changes.
Here is what I still have. (I simplified the code to focus on the problem)
Activicy.java
public class RecipeActivity extends AppCompatActivity { private Recipe recipe; private ActivityRecipeBinding binding; private RecipeBinderHelper rbhelper = new RecipeBinderHelper(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); recipe = intent.getParcelableExtra("recipe"); binding = DataBindingUtil.setContentView(this, R.layout.activity_recipe); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle(recipe.getName()); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); binding.recipeContent.setRecipe(recipe); binding.recipeContent.setHelper(rbhelper); binding.Button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {
Helper class
public class RecipeBinderHelper{ private Boolean presentationElementsVisible; private Boolean timerElementsVisible; public RecipeBinderHelper(){ this.presentationElementsVisible = true; this.timerElementsVisible = false; } public void setPresentationViewVisible(boolean presentationElementsVisible) { this.presentationElementsVisible = presentationElementsVisible; } public Boolean getPresentationElementsVisible() { return presentationElementsVisible; }
Markup
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <import type="android.view.View"/> <variable name="helper" type="com.myapps.recipeApp.RecipeBinderHelper"/> <variable name="recipe" type="com.myapps.recipeApp.Recipe"/> </data> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.myapp.recipeApp.RecipeActivity" tools:showIn="@layout/activity_recipe"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/r_source" android:textStyle="bold" android:text="@{recipe.source}" android:visibility="@{helper.presentationElementsVisible ? View.VISIBLE : View.GONE}" /> </RelativeLayout> </layout>
source share