Reputation: 688
My main activity pretty much sets up the tabs and displays the content inside the ViewPager. I am able to navigate to another tab by clicking the tabs.
Code:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private SectionsPageAdapter pageAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pageAdapter = 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));
}
// Add fragments to SectionsPageAdapter and give titles
private void setupViewPager(ViewPager viewPager) {
SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
adapter.addFragment(new ProfileTab(), "Profile");
adapter.addFragment(new GithubTab(), "Github Repos");
adapter.addFragment(new FollowerTab(), "Followers");
adapter.addFragment(new FollowingTab(), "Followings");
viewPager.setAdapter(adapter);
}
}
However, when I try to navigate to another tab by clicking on a TextView from one of the pages, it gives me an error. What I've tried so far is,
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.profile_tab, container, false);
... Code Hidden ...
// numRepos is the TextView that I have
numRepos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getActivity().getApplicationContext(), "num repos", Toast.LENGTH_SHORT).show();
viewPager.setCurrentItem(2);
}
});
return view;
And I actually knew this wouldn't work because the viewPager in this page is not same as the ViewPager in the MainActivity.java. How can I navigate to another tab by clicking the numRepos TextView?
Upvotes: 2
Views: 1546
Reputation: 163
Try add the viewPager findViewById Like this maybe help
viewPager = (ViewPager) getActivity.findViewById(R.id.container);
numRepos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getActivity().getApplicationContext(), "num repos", Toast.LENGTH_SHORT).show();
viewPager.setCurrentItem(2);
}
});
Upvotes: 0
Reputation: 75788
Create STATIC method in MainActivity
section.
public static ViewPager mViewPager; //GLOBAL
public static SectionsPageAdapter pageAdapter; //GLOBAL
public static void _openITEM() // Create this static method
{
viewPager.setCurrentItem(2);
}
Then
numRepos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
_openITEM();
}
});
Upvotes: 1
Reputation: 3255
Create this method in your MainActivity
-
public void navigateToPage(int i) {
viewPager.setCurrentItem(i);
}
Then call this method like this from any of your fragments -
((MainActivity)getActivity()).navigateToPage(2);
Upvotes: 0
Reputation: 5684
Try this in your fragment :
ViewPager mviewPager = (ViewPager) getActivity().findViewById(R.id.viewpager);
this id will be your viewpager id which is given in activity layout.
then just use this. mviewPager.setCurrentItem(2);
Upvotes: 2
Reputation: 105
Try to put this in the onClick
method:
TabActivity tabs = (TabActivity) getParent();
tabs.getTabHost().setCurrentTab(2);
Upvotes: 0