2017-07-01 3 views
0

Je travaille sur une application Android, où il y a 2 types d'utilisateurs. Lorsque l'utilisateur s'inscrit ou se connecte au système, ils sont redirigés vers le même écran d'accueil et voient le fragment de vue différent gonflé en fonction de leur type. J'ai pu y parvenir en utilisant les préférences partagées lors de la première inscription. Mon seul problème est que, si l'utilisateur se déconnecte et tente ensuite de se reconnecter, quel que soit le type d'utilisateur, le même écran d'accueil est chargé. Je doute, l'activité utilise le dernier ensemble Préférences partagées.Préférences partagées renvoie toujours la même valeur

Dans mon fragment, basé sur userType, je gonfle le fichier xml correspondant. Mon exigence est, lorsque l'utilisateur se connecte, comment gonfler le fichier XML correspondant. comment puis-je obtenir les préférences partagées dans SignInActivity pour charger le fragment xml correspondant.

Voici ce que j'ai essayé jusqu'ici.

MainMenuActivity.java

{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_menu); 
    ButterKnife.bind(this); 

    setSupportActionBar(toolbar); 

    gaFragmentStack = new Stack<>(); 

    Fragment home_fragment = new HomeFragment(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.container_gaFragments, home_fragment); 
    transaction.commit(); 

    final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

    if (getUid() != null) { 
     String userId = getUid(); 
     firebaseAuth = FirebaseAuth.getInstance(); 
     databaseReference = FirebaseDatabase.getInstance().getReference().child("users").child(userId); 

    } else { 
     onAuthFailure(); 
    } 

    final PrimaryDrawerItem home = new PrimaryDrawerItem().withName("Home").withIdentifier(1).withIcon(GoogleMaterial.Icon.gmd_home); 
    final PrimaryDrawerItem profile = new PrimaryDrawerItem().withName("Profile").withIdentifier(2).withIcon(GoogleMaterial.Icon.gmd_account); 
    final PrimaryDrawerItem gallery = new PrimaryDrawerItem().withName("Gallery").withIdentifier(3).withIcon(R.drawable.ic_perm_media_black_24dp); 
    final PrimaryDrawerItem recognition = new PrimaryDrawerItem().withName("Recognition").withIdentifier(4).withIcon(GoogleMaterial.Icon.gmd_face); 
    final PrimaryDrawerItem maps = new PrimaryDrawerItem().withName("Maps").withIdentifier(5).withIcon(R.drawable.ic_place_black_24dp); 
    final PrimaryDrawerItem tagAndLocate = new PrimaryDrawerItem().withName("Tag & Locate").withIdentifier(6).withIcon(R.drawable.ic_remove_red_eye_black_24dp); 
    final PrimaryDrawerItem gamesAndPuzzle = new PrimaryDrawerItem().withName("Games & Puzzles").withIdentifier(7).withIcon(R.drawable.ic_casino_black_24dp); 
    final PrimaryDrawerItem backup = new PrimaryDrawerItem().withName("Backup").withIdentifier(8).withIcon(GoogleMaterial.Icon.gmd_save); 
    final PrimaryDrawerItem logout = new PrimaryDrawerItem().withName("Logout").withIdentifier(9).withIcon(FontAwesome.Icon.faw_sign_out); 

    DrawerImageLoader.init(new AbstractDrawerImageLoader() { 
     @Override 
     public void set(ImageView imageView, Uri uri, Drawable placeholder) { 
      Picasso.with(imageView.getContext()).load(uri).placeholder(placeholder).fit().centerCrop().into(imageView); 
     } 

     @Override 
     public void cancel(ImageView imageView) { 
      Picasso.with(imageView.getContext()).cancelRequest(imageView); 
     } 
    }); 

    String name = preferences.getString(Preferences.NAME, ""); 
    String email = preferences.getString(Preferences.EMAIL, ""); 
    final ProfileDrawerItem userProfile = new ProfileDrawerItem().withName(name).withEmail(email).withIcon(R.drawable.ic_account_circle_white_24dp); 

    headerResult = new AccountHeaderBuilder() 
      .withActivity(this) 
      .withHeaderBackground(R.drawable.header) 
      .withSelectionListEnabledForSingleProfile(false) 
      .addProfiles(userProfile) 
      .withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() { 
       @Override 
       public boolean onProfileChanged(View view, IProfile profile, boolean currentProfile) { 
        return false; 
       } 
      }) 
      .build(); 

    String userType = preferences.getString(Preferences.USER_TYPE, ""); 

    if(userType !=null && userType.equalsIgnoreCase("Standard")) { 

     result = new DrawerBuilder() 
       .withActivity(this) 
       .withAccountHeader(headerResult) 
       .withToolbar(toolbar) 
       .withDisplayBelowStatusBar(false) 
       .withTranslucentStatusBar(true) 
       .withSavedInstance(savedInstanceState) 
       .withActionBarDrawerToggle(true) 
       .withActionBarDrawerToggleAnimated(true) 
       .addDrawerItems(home) 
       .addDrawerItems(profile) 
       .addDrawerItems(gallery) 
       .addDrawerItems(recognition) 
       .addDrawerItems(maps) 
       .addDrawerItems(tagAndLocate) 
       .addDrawerItems(gamesAndPuzzle) 
       .addDrawerItems(backup) 
       .addDrawerItems(new DividerDrawerItem()) 
       .addDrawerItems(logout) 
       .buildForFragment(); 

     result.setOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { 
      @Override 
      public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { 

       int drawItemId = (int) drawerItem.getIdentifier(); 
       Intent intent; 
       Fragment fragment; 
       switch (drawItemId) { 

        case 1: 
         fragment = new HomeFragment(); 
         gaFragmentStack.add(home); 
         break; 
        case 2: 
         fragment = new ProfileFragment(); 
         gaFragmentStack.add(profile); 
         break; 
        case 3: 
         fragment = new GalleryFragment(); 
         gaFragmentStack.add(gallery); 
         break; 
        case 4: 
         fragment = new RecognitionFragment(); 
         gaFragmentStack.add(recognition); 
         break; 
        case 5: 
         fragment = new MapsFragment(); 
         gaFragmentStack.add(maps); 
         break; 
        case 6: 
         fragment = new TagLocateFragment(); 
         gaFragmentStack.add(tagAndLocate); 
         break; 
        case 7: 
         fragment = new GamesPuzzlesFragment(); 
         gaFragmentStack.add(gamesAndPuzzle); 
         break; 
        case 8: 
         fragment = new BackupFragment(); 
         gaFragmentStack.add(backup); 
         break; 
        default: 
         fragment = new HomeFragment(); 
         break; 
       } 
       if (drawItemId == 9) { 
        FirebaseAuth.getInstance().signOut(); 
        SharedPreferences.Editor editor = preferences.edit(); 
        editor.clear(); 
        editor.apply(); 
        intent = new Intent(MainMenuActivity.this, SplashScreen.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
        startActivity(intent); 
        finish(); 
       } 

       FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
       transaction.replace(R.id.container_gaFragments, fragment); 
       transaction.commit(); 
       return false; 
      } 
     }); 

    }else { 
     result = new DrawerBuilder() 
       .withActivity(this) 
       .withAccountHeader(headerResult) 
       .withToolbar(toolbar) 
       .withDisplayBelowStatusBar(false) 
       .withTranslucentStatusBar(true) 
       .withSavedInstance(savedInstanceState) 
       .withActionBarDrawerToggle(true) 
       .withActionBarDrawerToggleAnimated(true) 
       .addDrawerItems(home) 
       .addDrawerItems(profile) 
       .addDrawerItems(maps) 
       .addDrawerItems(backup) 
       .addDrawerItems(new DividerDrawerItem()) 
       .addDrawerItems(logout) 
       .buildForFragment(); 


     result.setOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { 
      @Override 
      public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { 

       int drawItemId = (int) drawerItem.getIdentifier(); 
       Intent intent; 
       Fragment fragment; 
       switch (drawItemId) { 

        case 1: 
         fragment = new HomeFragment(); 
         gaFragmentStack.add(home); 
         break; 
        case 2: 
         fragment = new ProfileFragment(); 
         gaFragmentStack.add(profile); 
         break; 
        case 5: 
         fragment = new MapsFragment(); 
         gaFragmentStack.add(maps); 
         break; 
        case 8: 
         fragment = new BackupFragment(); 
         gaFragmentStack.add(backup); 
         break; 
        default: 
         fragment = new HomeFragment(); 
         break; 
       } 
       if (drawItemId == 9) { 
        FirebaseAuth.getInstance().signOut(); 
        SharedPreferences.Editor editor = preferences.edit(); 
        editor.clear(); 
        editor.apply(); 
        intent = new Intent(MainMenuActivity.this, SplashScreen.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
        startActivity(intent); 
        finish(); 
       } 

       FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
       transaction.replace(R.id.container_gaFragments, fragment); 
       transaction.commit(); 
       return false; 
      } 
     }); 
    } 

} 

SignInActivity.java

{ 

    String email; 

    if(view.getId() == R.id.loginButton){ 
     email = emailLoginTextInputEditText.getText().toString(); 
     String password = passwordLoginEditText.getText().toString(); 

     if (!validateEmail(email)) { 
      return; 
     } 
     if (!validateSetPass(password)) { 
      return; 
     } 
     showProgressDialog("Signing in..."); 
     mAuth.signInWithEmailAndPassword(email,password) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         progressDialog.dismiss(); 
         if(task.isSuccessful()){ 
          hideProgressDialog(); 
          DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("users").child(getUid()); 
          databaseReference.addValueEventListener(new ValueEventListener() { 
           @Override 
           public void onDataChange(DataSnapshot dataSnapshot) { 
            Profile profile = dataSnapshot.getValue(Profile.class); 
            Log.e("key", dataSnapshot.getKey()); 
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(SignInActivity.this); 
            SharedPreferences.Editor editor = sharedPreferences.edit(); 
            if(profile !=null){ 
             editor.putString(Preferences.EMAIL, profile.getEmail()); 
             editor.putString(Preferences.NAME, profile.getFullName()); 
            } 
            editor.putString(Preferences.USERID, getUid()); 
            editor.apply(); 

           } 

           @Override 
           public void onCancelled(DatabaseError databaseError) { 

           } 
          }); 

          Intent loginIntent = new Intent(SignInActivity.this,MainMenuActivity.class); 
          loginIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
          startActivity(loginIntent); 
          finish(); 
         } 
        } 
       }); 
    } 
    else if(view.getId() == R.id.singinGoogleButton) 
    { 
     Toast.makeText(SignInActivity.this,"Signing in with google...",Toast.LENGTH_SHORT).show(); 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 

    } 
    else if(view.getId() == R.id.signupTV) 
    { 
     Intent intent = new Intent(SignInActivity.this,SignUpActivity.class); 
     startActivity(intent); 
     finish(); 
    } 
    else if (view.getId() == R.id.forgotPasswordTextView) { 

     Intent intent = new Intent(SignInActivity.this,ResetPasswordActivity.class); 
     startActivity(intent); 
     finish(); 
     } 
    } 

SignUpActivity.java

{ 

    showProgressDialog("Saving..."); 
    Intent intent = getIntent(); 

    String fullName = intent.getStringExtra("fullName"); 
    String userEmailAddress = intent.getStringExtra("emailAddress"); 
    String userType = intent.getStringExtra("userType"); 

    String phoneNumber = phoneNumberTextInputEditText.getText().toString().trim(); 
    String dateOfBirth = dateofBirthTextInputEditText.getText().toString().trim(); 
    String securityAnswer = securityAnswerTextInputEditText.getText().toString().trim(); 

    if (!validateForm(phoneNumber, dateOfBirth, securityAnswer)) { 
     hideProgressDialog(); 
     return; 
    } 

    if(userType.equalsIgnoreCase("Standard")){ 
     hideProgressDialog(); 
     Toast.makeText(this, "User details saved!",Toast.LENGTH_SHORT).show(); 
     Intent guardianIntent = new Intent(ContactDetailsActivity.this, AddGuardianActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
     guardianIntent.putExtra("fullName", fullName); 
     guardianIntent.putExtra("userEmailAddress", userEmailAddress); 
     guardianIntent.putExtra("phoneNumber", phoneNumber); 
     guardianIntent.putExtra("dateofBirth", dateOfBirth); 
     guardianIntent.putExtra("userType", userType); 
     guardianIntent.putExtra("securityAnswer", securityAnswer); 
     guardianIntent.putExtra("securityQuestion", securityQuestion); 
     startActivity(guardianIntent); 
     finish(); 
    }else{ 
     databaseReference.child("fullName").setValue(fullName); 
     databaseReference.child("phoneNumber").setValue(phoneNumber); 
     databaseReference.child("dateOfBirth").setValue(dateOfBirth); 
     databaseReference.child("securityAnswer").setValue(securityAnswer); 
     databaseReference.child("securityQuestion").setValue(securityQuestion); 
     databaseReference.child("userType").setValue(userType); 

     databaseReference.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Profile profile = dataSnapshot.getValue(Profile.class); 
       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ContactDetailsActivity.this); 
       SharedPreferences.Editor editor = preferences.edit(); 
       if(profile != null) { 
        editor.putString(Preferences.NAME, profile.getFullName()); 
        editor.putString(Preferences.EMAIL, profile.getEmail()); 
        editor.putString(Preferences.USER_TYPE, profile.getUserType()); 
       } 
       editor.putString(Preferences.USERID, getUid()); 
       editor.apply(); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

     hideProgressDialog(); 
     Toast.makeText(this, "Profile Created", Toast.LENGTH_SHORT).show(); 
     Intent mainMenuIntent = new Intent(ContactDetailsActivity.this, MainMenuActivity.class); 
     mainMenuIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(mainMenuIntent); 
     finish(); 
    } 

} 

HomeFragment.java

{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
    String userType = sharedPreferences.getString(Preferences.USER_TYPE, ""); 
    View view; 
    if(userType != null && userType.equalsIgnoreCase("STANDARD")) { 

     view = inflater.inflate(R.layout.fragment_home, container, false); 
    }else{ 
     view = inflater.inflate(R.layout.fragment_home_guardian, container, false); 
    } 
    toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
    toolbar.setTitle(getString(R.string.homeScreen)); 
    initControls(view,userType); 
    return view; 
} 

Lorsque l'utilisateur se connecte à l'application, comment je charger le xml fragment respectif? Qu'est-ce que je rate? Aide aimablement.

Répondre

0

Vous obtenez des instances SharedPreference en utilisant getDefaultSharedPreferences() mais avec un contexte différent à chaque fois.

Utilisez getApplicationContext() au lieu de Activity.this ou this.