1

メイン アクティビティにナビゲーション ビューがあり、アクティビティの再開時にナビゲーション ビューでユーザーの情報を更新したい:

1- if user is log in show the charging account menu item and sign
    out menu item

2- if user is sign out , show sign in menu item and hide charging
account

private void handleUserLogin(){
    NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_main);
    TextViewWithCustomFont fullNameTextView=(TextViewWithCustomFont)findViewById(R.id.userName_navigation);
    TextViewWithCustomFont emailTextView=(TextViewWithCustomFont)findViewById(R.id.user_email_navigation);
    final TextViewWithCustomFont balanceTextview=(TextViewWithCustomFont)findViewById(R.id.user_balance_navigation);
    ImageView avatarImageView=(ImageView)findViewById(R.id.navigation_profile_image);
    MenuItem chargeHesabMenuItem=navigationView.getMenu().findItem(R.id.navigation_charge);
    applyFontToMenuItem(chargeHesabMenuItem);

    if (isLogined()) {
        try {
            MenuItem menuItem=navigationView.getMenu().findItem(R.id.navigation_sign_out);
            menuItem.setTitle("خروج از حساب کاربری");//set title to sign out
            applyFontToMenuItem(menuItem);
            menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    new SignoutFragment().show(getSupportFragmentManager(), "");
                    return true;
                }
            });
            chargeHesabMenuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    //show dialog of charging account because user stock is not enough
                    ChargeDialog dialog = new ChargeDialog();
                    dialog.show(getSupportFragmentManager(), "");
                    dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                        @Override
                        public void onDismiss(DialogInterface dialog) {
                            getUserBalance(getUserId());
                        }
                    });
                    return false;
                }
            });
            //fill user data
            SharedPreferences sharedPreferences=getSharedPreferences(ReservationActivity.SHP_NAME, MODE_PRIVATE);
            String firstName=sharedPreferences.getString(ReservationActivity.JSON_KEY_FIRST_NAME, "");
            String lastName=sharedPreferences.getString(ReservationActivity.JSON_KEY_LAST_NAME,"");
            fullNameTextView.setText(firstName+" "+lastName);
            String email=sharedPreferences.getString(ReservationActivity.JSON_KEY_EMAIL,"");
            emailTextView.setText(email);
            String avatarUrl=sharedPreferences.getString(ReservationActivity.JSON_KEY_AVATAR,"");
            Picasso.with(this).load(avatarUrl).placeholder(ResourcesCompat.getDrawable(getResources(),R.drawable.profile_image,null)).error(ResourcesCompat.getDrawable(getResources(),R.drawable.profile_image,null)).into(avatarImageView);
            //get balance of user
            int userId=sharedPreferences.getInt(ReservationActivity.JSON_KEY_USER_ID, 0);
            onBalanceGetted=new OnBalanceGetted() {
                @Override
                public void onBalanceGetted(long balance) {
                    balanceTextview.setText(ConvertEnglishDigitsToFarsi.getInstance().convert(balance) + " ریال");
                }
            };
            getUserBalance(userId);
            //set visibilities
            balanceTextview.setVisibility(View.VISIBLE);
            emailTextView.setVisibility(View.VISIBLE);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }else {
        MenuItem menuItem= navigationView.getMenu().findItem(R.id.navigation_sign_out);
        chargeHesabMenuItem.setVisible(false);
        menuItem.setTitle("ورود به حساب کاربری");//set title to sign in
        applyFontToMenuItem(menuItem);
        menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                startActivity(new Intent(ConsultantsActivity.this, LoginActivity.class));
                return true;
            }
        });
        //fill user data
        fullNameTextView.setText("وارد حساب کاربری خود شوید");
        avatarImageView.setImageDrawable(ResourcesCompat.getDrawable(getResources(),R.drawable.profile_image,null));
        //set visibilities
        emailTextView.setVisibility(View.GONE);
        balanceTextview.setVisibility(View.GONE);
    }

    navigationView.buildLayer();
    navigationView.forceLayout();
    navigationView.invalidate();
    navigationView.requestLayout();
}

しかし、これがナビゲーションビューに変更されると、ユーザーがメニュー項目の1つをクリックするまで機能せず、更新されません!

これの原因は何ですか!!! ナビゲーション ビューのメニュー項目を更新するにはどうすればよいですか???

4

0 に答える 0