I'm trying to create Login by using ViewPager.
The problem is when I press Login in FragmentAccount it goes to FragmentPage, but the information in FragmentPage is not updated.
(My theory) To me it feels like when FragmentAccount is loaded it also Preloads FragmentPage, therefore when it loads up the page it used non-update information for FragmentPage. Though, I don't know enough about Android Studio...
I think the problem lies within the first two classes, but I added other two just in case.
I very much appreicate the help.
I did test, and the data is stored correctly.
User Enters log in details and presses Log in button:
public class FragmentAccount extends Fragment implements View.OnClickListener {
private static final String TAG = "FragmentAccount";
private EditText fieldUsername;
private EditText fieldPassword;
private Button bLogIn;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_account, container, false);
fieldUsername = (EditText) view.findViewById(R.id.fragment_account_field_username);
fieldPassword = (EditText) view.findViewById(R.id.fragment_account_field_password);
bLogIn = (Button) view.findViewById(R.id.fragment_account_button_login);
bLogIn.setOnClickListener(this);
return view;
}
@Override
public void onClick(View view) {
boolean logedIn = MainActivity.user.logIn(fieldUsername.getText().toString(), fieldPassword.getText().toString());
fieldPassword.setText("");
if (logedIn) {
fieldUsername.setText("");
((MainActivity) getActivity()).setViewPager(5);
}
}
}
The log in details should be displayed here:
public class FragmentProfile extends Fragment {
private static final String TAG = "FragmentProfile";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_profile, container, false);
final TextView usernameText = (TextView) view.findViewById(R.id.fragment_profile_text_username_2);
final TextView passwordText = (TextView) view.findViewById(R.id.fragment_profile_text_password_2);
final Button bLogOut = (Button) view.findViewById(R.id.fragment_profile_button_logout);
String s1 = MainActivity.user.getLogedInUsername();
String s2 = MainActivity.user.getLogedInPassword();
usernameText.setText(s1);
passwordText.setText(s2);
Log.i(TAG, s1 + ", " + s2);
bLogOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MainActivity.user.logOut();
((MainActivity) getActivity()).setViewPager(4);
}
});
return view;
}
}
Where the log in data is stored:
public class Users {
private static final String TAG = "Users";
private boolean isUserLogedIn = false;
private String logedInUsername = "";
private String loggedInPassword = "";
final private String adminUsername = "1";
final private String adminPassword = "2";
public Users(){
}
public boolean logIn(String usr, String pass){
if( usr.equals(adminUsername) && pass.equals(adminPassword)){
isUserLogedIn = true;
logedInUsername = usr;
loggedInPassword = pass;
Log.i(TAG, logedInUsername + ", " + loggedInPassword);
return isUserLogedIn;
}else{
return isUserLogedIn;
}
}
public void logOut(){
isUserLogedIn = false;
logedInUsername = "";
loggedInPassword = "";
}
public boolean isUserLogedIn(){
return isUserLogedIn;
}
public String getLogedInUsername(){
return logedInUsername;
}
public String getLogedInPassword(){
return loggedInPassword;
}
}
The main activity, and where I change between the pages
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
static final public Users user = new Users();
private SectionsStatePageAdapter mSectionsStagePageAdapter;
private ViewPager mViewPager;
private DrawerLayout mDrawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//body
mSectionsStagePageAdapter = new SectionsStatePageAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.container);
setupViewPager(mViewPager);
//sidebar
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
setNavigationListner();
}
private void setNavigationListner(){
NavigationView mNavigationview = (NavigationView) findViewById(R.id.nav_view);
mNavigationview.setNavigationItemSelectedListener(this);
}
/**
* Add all of the fragment to the adapter, so we can change the fragment that is displayed.
*
* @param viewPager
*/
private void setupViewPager(ViewPager viewPager){
SectionsStatePageAdapter adapter = new SectionsStatePageAdapter(getSupportFragmentManager());
adapter.addFragment(new FragmentDictionary(), "FragmentDictionary"); //0
adapter.addFragment(new FragmentCheck(), "FragmentCheck"); //1
adapter.addFragment(new FragmentHome(), "FragmentHome");//2
adapter.addFragment(new FragmentPricetag(), "FragmentPricetag");//3
adapter.addFragment(new FragmentAccount(), "FragmentAccount");//4
adapter.addFragment(new FragmentProfile(), "FragmentProfile"); //5
adapter.addFragment(new FragmentHelp(), "FragmentHelp");//7
adapter.addFragment(new FragmentSettings(), "FragmentSettings");//8
adapter.addFragment(new FragmentAboutUs(), "FragmentAboutUs");//9
viewPager.setAdapter(adapter);
setViewPager(2);
}
/**
* Changes the fragment by passing the corresponding i to the fragment in the adapter
* @param fragmentNumber
*/
public void setViewPager(int fragmentNumber){
mViewPager.setCurrentItem(fragmentNumber);
}
public void setmDrawerLayoutVisable(boolean setVisible){
if(setVisible){
mDrawerLayout.openDrawer(Gravity.RIGHT);
}else{
mDrawerLayout.closeDrawer(Gravity.RIGHT);
}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch(item.getItemId()){
case R.id.nav_account:
if(user.isUserLogedIn()){
setViewPager(5);
}else{
setViewPager(4);
}
setmDrawerLayoutVisable(false);
break;
case R.id.nav_help:
setViewPager(7);
setmDrawerLayoutVisable(false);
break;
case R.id.nav_settings:
setViewPager(8);
setmDrawerLayoutVisable(false);
break;
case R.id.nav_about_us:
setViewPager(9);
setmDrawerLayoutVisable(false);
break;
default:
break;
}
return false;
}
}