Assign different actions to a Floating Button on Android

2

I have a FloatingActionButton general and 3 Fragments that are loaded with a ViewPager

Following the Google Design Guide , show that FloatingActionButton is in parent and not in each fragment

video: link

I have the following questions:

  • Assign functionality depending on the fragment
  • Change the icon
  • Hide and show on each page change.

layout.xml

<android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab_action"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_margin="@dimen/fab_margin"
    android:tint="@android:color/white"
    app:srcCompat="@drawable/ic_send_black_24dp" />
    
asked by Webserveis 21.07.2018 в 11:21
source

1 answer

2

Fixed

Starting from that solution point at SO

MainActivity.java

private FloatingActionButton fab;
...
fab = (FloatingActionButton) findViewById(R.id.fab_action);

create public functions to show and hide the button

public void showFloatingActionButton() {
    fab.show();
}

public void hideFloatingActionButton() {
    fab.hide();
}

Fragments

In each fragment you want to use the FloatingActionButton and assign a specific functionality

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser && isResumed()) {
        onResume();
    }
}

@Override
public void onResume() {
    super.onResume();
    if (!getUserVisibleHint()) {
        return;
    }

    MainActivity mainActivity = (MainActivity) getActivity();
    if (mainActivity != null) {

        mainActivity.showFloatingActionButton(); //fuerza la visibilidad

        FloatingActionButton fab = mainActivity.findViewById(R.id.fab_action);

        fab.setImageResource(R.drawable.ic_send_black_24dp); //Cambiar icono

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mainActivity, "pub action", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

If the fragment we want the FloatingActionButton not to be displayed use mainActivity.hideFloatingActionButton()

To change the functionality, modify:

fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //Nueva funcionalidad
    }
});

Hide the FloatingActionButton

Each page transition must be hidden.

in MainActivity.java

    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout) {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            hideFloatingActionButton();
        }
    });
    
answered by 21.07.2018 / 12:10
source