Reputation: 47
I have an activity which contains 2 buttons - Login and Sign up. Both of these has an activity linked (Fragment based Tabbed activity) which contains the Login/Signup form.
Now I'm unable to navigate to the particular tab when clicked on a button. ie, If signup button is clicked, it should open Signup fragment based tab and If login button is clicked, it should open login fragment based tab.
How do I achieve this?
Below are my codes for the respective actions.
Home Activity.java -
public class HomeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
findViewById(R.id.signup_btn).setOnClickListener(listener_signup_btn);
findViewById(R.id.signin_btn).setOnClickListener(listener_signin_btn);
}
View.OnClickListener listener_signup_btn = new View.OnClickListener() {
@Override
public void onClick(View view) {
//Intent intent = new Intent(HomeActivity.this, SignupActivity.class);
//startActivity(intent);
}
};
View.OnClickListener listener_signin_btn = new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(HomeActivity.this, HomeTaberActivity.class);
startActivity(intent);
}
};
}
HomeTaberActivity.java -
public class HomeTaberActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener {
private TabLayout hometabLayout;
private ViewPager homeviewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hometaber);
hometabLayout = (TabLayout) findViewById(R.id.hometabLayout);
hometabLayout.addTab(hometabLayout.newTab().setText("Sign In"));
hometabLayout.addTab(hometabLayout.newTab().setText("Sign Up"));
hometabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
homeviewPager = (ViewPager) findViewById(R.id.homepager);
HomePager adapter = new HomePager(getSupportFragmentManager(), hometabLayout.getTabCount());
adapter.Initialise(new LoginActivity(),new SignupActivity());
adapter.addstring("Sign In"); adapter.addstring("Sign Up");
homeviewPager.setAdapter(adapter);
hometabLayout.setupWithViewPager(homeviewPager);
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
homeviewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
}
Upvotes: 2
Views: 2349
Reputation: 5684
Add one value with intent. i.e. for login 1 and signup 2. and check in activity if value is 1 then viewpager current item 0 and if 2 then viewpager current item 1.
Home Activity.java :
public class HomeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
findViewById(R.id.signup_btn).setOnClickListener(listener_signup_btn);
findViewById(R.id.signin_btn).setOnClickListener(listener_signin_btn);
}
View.OnClickListener listener_signup_btn = new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(HomeActivity.this, HomeTaberActivity.class);
intent.putExtra("value", 1);
startActivity(intent);
}
};
View.OnClickListener listener_signin_btn = new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(HomeActivity.this, HomeTaberActivity.class);
intent.putExtra("value", 2);
startActivity(intent);
}
};
}
HomeTaberActivity.java :
public class HomeTaberActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener {
private TabLayout hometabLayout;
private ViewPager homeviewPager;
int value;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hometaber);
hometabLayout = (TabLayout) findViewById(R.id.hometabLayout);
hometabLayout.addTab(hometabLayout.newTab().setText("Sign In"));
hometabLayout.addTab(hometabLayout.newTab().setText("Sign Up"));
hometabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
homeviewPager = (ViewPager) findViewById(R.id.homepager);
HomePager adapter = new HomePager(getSupportFragmentManager(), hometabLayout.getTabCount());
adapter.Initialise(new LoginActivity(),new SignupActivity());
adapter.addstring("Sign In"); adapter.addstring("Sign Up");
homeviewPager.setAdapter(adapter);
hometabLayout.setupWithViewPager(homeviewPager);
final Intent intent = new Intent(getIntent());
value = intent.getIntExtra("value", -1);
if(value == 1) {
viewpager.setCurrentItem(0);
} else {
viewpager.setCurrentItem(1);
}
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
homeviewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
}
Upvotes: 2
Reputation: 75778
You can use
STATIC
method. putExtra/getIntExtra
Method. Check Vishva Dave's
Answer.1st way
public static ViewPager homeviewPager; //GLOBAL
public static HomePager adapter; //GLOBAL
adapter = new HomePager(getSupportFragmentManager(), hometabLayout.getTabCount()); //onCreate section
public static void _openSIGNIN() // Create this static method
{
homeviewPager.setCurrentItem(0);
}
public static void _openSIGNUP() // Create this static method
{
homeviewPager.setCurrentItem(1);
}
HomeTaberActivity
View.OnClickListener listener_signin_btn = new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(HomeActivity.this, HomeTaberActivity.class);
startActivity(intent);
_openSIGNIN();
}
};
View.OnClickListener listener_signup_btn = new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(HomeActivity.this, HomeTaberActivity.class);
startActivity(intent);
_openSIGNUP();
}
};
Upvotes: 2