Amrutha
Amrutha

Reputation: 575

How to disable and enable the button of viewpager layout inside the fragments in android

In my project, I have created a viewpager and inside pageradapter I am adding the list of fragments. I have a button in viewpager fragment. This button should show and hide only in few fragments. That means when I am in firstfragment the button should be disabled. Again when i swipe to second fragment the button should enable. Again in third fragment the button should enable. When i try to disable the button in first fragment it is getting disabled in all the three fragments. Can anybody let me know how can I resolve this.

Code:

public class ViewPagerFragment extends Fragment {

    TextView tv1,tv2,tvalue2,tv3, tvalue3,tv4,tvalue4;
    public static Button button1, button2;
    public static ViewPager pager;
    public static TabLayout tabLayout;

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //returning our layout file
        //change R.layout.yourlayoutfilename for each of your fragments
        View v = inflater.inflate(R.layout.pagerlayout, container, false);
        pager = (ViewPager)v.findViewById(R.id.viewPager);
        pager.setAdapter(new ViewPagerAdapter(getChildFragmentManager()));

        tabLayout = (TabLayout) v.findViewById(R.id.tab_layout);
        tabLayout.setupWithViewPager(pager, true);

        System.out.println("curent pagerrrr"+Integer.toString(pager.getCurrentItem()));

        tv1 = (TextView)v.findViewById(R.id.tv1);

        tv2 = (TextView)v.findViewById(R.id.tv2);
        tvalue2 = (TextView)v.findViewById(R.id.tvalue2);
        tv3 = (TextView)v.findViewById(R.id.tv3);
        tvalue3 = (TextView)v.findViewById(R.id.tvalue3);
        tv4 = (TextView)v.findViewById(R.id.tv4);
        tvalue4 = (TextView)v.findViewById(R.id.tvalue4);
        button1 = (Button) v.findViewById(R.id.btn1);

        button1.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // do something
                button1.setVisibility(v.GONE);
                tv1.setVisibility(v.VISIBLE);
                tv2.setVisibility(v.VISIBLE);
                tvalue2.setVisibility(v.VISIBLE);
                tv3.setVisibility(v.VISIBLE);
                tvalue3.setVisibility(v.VISIBLE);
                tv4.setVisibility(v.VISIBLE);
                tvalue4.setVisibility(v.VISIBLE);
                button2.setVisibility(v.VISIBLE);
            }
        });

      return v;
    }
}

PagerAdapter

public class ViewPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int pos) {
        switch(pos) {

            case 0: return Fragment1.newInstance("");
            case 1: return Fragment2.newInstance("");
            case 2: return Fragment3.newInstance("");
            default: return Fragment1.newInstance("");
        }
    }

    @Override
    public int getCount() {
        return 3;
    }
}

Upvotes: 0

Views: 466

Answers (1)

Longalei
Longalei

Reputation: 502

you can add listener to your ViewPager.like this and change your button's state in the method of onPageSelected.

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

        }

        @Override
        public void onPageSelected(int position) {
            if(position==0){
                button1.setEnabled(false);
            }else {
                button1.setEnabled(true);
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
    pager.setCurrentItem(0);

Upvotes: 1

Related Questions