letsCode
letsCode

Reputation: 3044

Hide ImageView from ToolBar in all fragments but one

Basically I am looking to put a refresh button in the toolbar of a fragment. My main activity has four fragments that it will handle, but I only want the refresh icon on one of them.

Here is my toolbar code

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:layout_scrollFlags="scroll|enterAlways"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_cached_black_24dp"
        android:layout_alignParentRight="true"
        android:layout_marginRight="20dp"
        android:tint="@color/colorWhite"
        android:layout_gravity="right"
        android:id="@+id/refreshResults"
        android:textSize="12sp"
        android:background="@null"
        android:layout_alignParentEnd="true"/>


</android.support.v7.widget.Toolbar>

Inside of my Activity class I did

    refreshResults = (ImageView) findViewById(R.id.refreshResults);
    refreshResults.setVisibility(View.GONE);

Inside of my Fragments I did

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ImageView refreshResults = (ImageView) getActivity().findViewById(R.id.refreshResults);
    refreshResults.setVisibility(View.GONE);
}

I would put VISIBLE on the fragments I would want to show it.

It kind of works, its not as smooth as I would like... Is there a good way to handle thing type of requirement that I am looking for?

Inside of my main activity I got:

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new HomeFragment(), "0");
    adapter.addFragment(new PickYourProsFragment(), "1");
    adapter.addFragment(new ResultsFragment(), "2");
    adapter.addFragment(new ChatFragment(), "3");
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> fragmentList = new ArrayList<>();
    private final List<String> fragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        fragmentList.add(fragment);
        fragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return fragmentTitleList.get(position);
    }
}

HERE IS THE SOLUTION FOR ANYONE WHO COMES ACROSS THIS LATER.

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        if (position == 0) {
            System.out.println("0");
            refreshResults.setVisibility(View.GONE);
        } else if (position == 1) {
            System.out.println("1");
            refreshResults.setVisibility(View.GONE);
        } else if (position == 2) {
            System.out.println("2");
            refreshResults.setVisibility(View.VISIBLE);
        } else if (position == 3) {
            System.out.println("3");
            refreshResults.setVisibility(View.GONE);
        }
    }

Upvotes: 1

Views: 581

Answers (1)

Umar Hussain
Umar Hussain

Reputation: 3527

if you are using view pager for adapters you can override OnPageChangeListener for ViewPager in parent activity where you can hide/show onPageSelected(int position)

Upvotes: 1

Related Questions