2017-07-01 83 views
0

我正在開發一個Android應用程序,其中有兩種類型的用戶。當用戶註冊或登錄系統時,它們會被重定向到同一主屏幕,並根據其類型查看不同的視圖片段。在第一次註冊時,我可以使用共享首選項來實現此目的。我唯一的問題是,如果用戶註銷並嘗試再次登錄,那麼他是什麼類型的用戶,同一個主屏幕會被加載。我懷疑,該活動使用最後設置的共享首選項。共享首選項始終返回相同的值

在我的片段中,基於userType,我膨脹了相應的xml文件。我的要求是,當用戶登錄時,如何膨脹相應的xml文件,即。我如何獲得SignInActivity中的共享首選項來加載相應的片段xml。

這是我到目前爲止嘗試過的。

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; 
} 

當該應用程式用戶的跡象,怎麼我加載相應的片段XML?我錯過了什麼?請幫助。

回答

0

您正在使用getDefaultSharedPreferences()獲取SharedPreference實例,但每次都使用不同的上下文。

使用getApplicationContext()而不是Activity.thisthis