Reputation: 35
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
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