2017-07-01 5 views
0

私は2種類のユーザーが存在するAndroidアプリケーションで作業しています。ユーザーがシステムにサインアップまたはログインすると、ユーザーは同じホーム画面にリダイレクトされ、その種類に応じて異なるビューの断片が膨張します。初めてのサインアップ時にShared Preferencesを使ってこれを達成できました。私の唯一の問題は、ユーザーがサインアウトして再びログインしようとすると、彼がどんなタイプのユーザーであっても、同じホーム画面がロードされることです。私は、アクティビティが最後のセットの共有設定を使用しているかどうかは疑問です。共有設定は常に同じ値を返します

私の断片では、userTypeに基づいて、対応するxmlファイルを膨張させます。私の要件は、ユーザーがサインインすると、対応するXMLファイルieをどのように膨張させるかです。 SignInActivityのShared環境設定を取得して、対応するフラグメント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インスタンスを取得しています。

Activity.thisまたはthisの代わりにgetApplicationContext()を使用してください。

関連する問題