lp879
lp879

Reputation: 35

Fragment(tab) code starts working without selecting tab

Tab3 code starts working without selecting it using tabs.All tabs code are working at the same time when i launch MainActivity.How do i make them work when user selects the tab i guess onCreateView is wrong.I have tried to use other methods but all of them were firing before switching to tab. thanks

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    private SectionsPageAdapter mSectionsPageAdapter;

    private ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate: Starting.");

        mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        setupViewPager(mViewPager);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(mViewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
        adapter.addFragment(new tab1_fragment(), "TAB1");
        adapter.addFragment(new tab2_fragment(), "TAB2");
        adapter.addFragment(new tab3_fragment(), "TAB3");
        viewPager.setAdapter(adapter);
    }


}

SectionsPageAdapter.java

public class SectionsPageAdapter extends FragmentPagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

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

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

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

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

Tab3:

public class tab3_fragment extends Fragment {
    private static final String TAG = "Tab3Fragment";

    private Button btnTEST;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tab3_fragment,container,false);
        btnTEST = (Button) view.findViewById(R.id.btnTEST3);

        btnTEST.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(), "TESTING BUTTON CLICK 3",Toast.LENGTH_SHORT).show();
            }
        });

        //This is called when i launch mainactivty as intent but i want to make this work when user selects tab 3

        Toast.makeText(getActivity(), "tab 3 selected",Toast.LENGTH_SHORT).show();


        return view;
    }
}

Upvotes: 0

Views: 46

Answers (1)

jaimit modi
jaimit modi

Reputation: 56

Override setUserVisibleHint() in your fragment, this method will call only when fragment is visible to user.

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
  if(isVisibleToUser)
    {
Toast.makeText(getActivity(), "tab 3 selected",Toast.LENGTH_SHORT).show();
   }
}

Upvotes: 2

Related Questions