2017-12-31 59 views
0

Firebase 응용 프로그램을 만들었습니다.프래그먼트 바가 프래그먼트 안에 표시되지 않습니다.

지금까지 모든 것이 훌륭하게 작동했습니다. 그러나 나는 고칠 수없는 한 가지 문제가 있습니다. 내 MainActivity.java

Interface ProgressDisplay.java

Interface 2 개 방법

서브 파편에서이 2 개 개의 메소드를 호출 할
public interface ProgressDisplay { 

    public void showProgress(); 

    public void hideProgress(); 
} 

임 수 없습니다에이 구현되면,에 켜거나 가시성을 설정 임없는 조각.

ManageAccountFragment.java 

package com.company.walt.fragments; 

public class ManageAccountFragment extends Fragment { 

    private EditText mName; 
    private Button mUpdateBtn; 

    private ProgressBar mProgressBar; 
    public ManageAccountFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_manage_account, container, false); 

     mName = (EditText)view.findViewById(R.id.input_name); 
     mUpdateBtn = (Button)view.findViewById(R.id.btn_update); 

     mUpdateBtn.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View view){ 

       if (!isEmpty (mName.getText().toString())) 
       { 

        showProgress(); 
        Toast.makeText(getActivity(), "SHOW DIALOG", Toast.LENGTH_SHORT).show(); 

        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
        if (user != null) 
        { 
         UserProfileChangeRequest profileUpdate = new UserProfileChangeRequest.Builder() 
           .setDisplayName(mName.getText().toString()) 
           //.setPhotoUri(Uri.parse("https://avatarfiles.alphacoders.com/862/86285.jpg")) 
           .build(); 

         user.updateProfile(profileUpdate).addOnCompleteListener(new OnCompleteListener<Void>() { 
          @Override 
          public void onComplete(@NonNull Task<Void> task) { 
           if (task.isSuccessful()) 
           { 
            Log.d(TAG, "onComplete: User Profile updated"); 
           } 
          } 
         }); 

         hideProgress(); 
         Toast.makeText(getActivity(), "HIDE DIALOG", Toast.LENGTH_SHORT).show(); 

        } 
       } 

      } 

     }); 

     hideSoftKeyboard(); 

     return view; 
    } 

    private boolean isEmpty(String string){ 
     return string.equals(""); 
    } 

    /** 
    * Display progressbar 
    */ 
    protected void showProgress() { 
     if (getActivity() instanceof ProgressDisplay) { 
      ((ProgressDisplay) getActivity()).showProgress(); 
     } 
    } 

    /** 
    * Hide progressbar 
    */ 
    protected void hideProgress() { 
     if (getActivity() instanceof ProgressDisplay) { 
      ((ProgressDisplay) getActivity()).hideProgress(); 
     } 
    } 

    private void hideSoftKeyboard(){ 
     getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
    } 

} 

MainActivity.java 

package com.company.walt.activities; 

public class MainActivity extends AppCompatActivity implements ProgressDisplay { 

    private static final String TAG = "MainActivity"; 

    private static final int USER_PROFILE = 1; 
    private static final int PROFILE_MANAGE = 2; 
    private static final int PROFILE_SETTING = 3; 

    private Toolbar mainToolbar; 
    private AccountHeader headerResult = null; 
    private Drawer result = null; 

    private ProgressBar mProgressBar; 

    private ToggleButton switcher; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) { setTheme(R.style.NightTheme); } 
     else { setTheme(R.style.LightTheme);} 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     switchAppTheme(); 
     createToolbar(); 

     mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 

     buildHeader(false, savedInstanceState); 
     createDrawerBuilder(); 

     getUserDetails(); 

    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     checkAuthenticationState(); 
    } 

    /** 
    * Used to check if user is authenticated or not 
    */ 
    private void checkAuthenticationState() 
    { 
     Log.d(TAG, "checkAuthenticationState: checking authentication state."); 
     FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
     if (user == null){ 
      Log.d(TAG, "checkAuthenticationState: user is null, navigating back to login screen."); 
      Intent intent = new Intent(MainActivity.this, LoginActivity.class); 
      startActivity(intent); 
      finish(); 
     } 
     else { 
      Log.d(TAG, "checkAuthenticationState: user is authenticated."); 
     } 
    } 

    /** 
    * Used to switch between light and dark mode 
    */ 
    public void switchAppTheme() { 

     switcher = (ToggleButton) findViewById(R.id.switcher); 

     if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) { 
      switcher.setChecked(true); 
     } 

     switcher.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); 
        restartApp(); 
       } else{ 
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); 
        restartApp(); 
       } 
      } 
     }); 
    } 

    /** 
    * Used to create the toolbar on top 
    */ 
    private void createToolbar(){ 
     mainToolbar = (Toolbar) findViewById(R.id.main_toolbar); 
     setSupportActionBar(mainToolbar); 
     getSupportActionBar().setTitle(R.string.app_name); 
    } 

    /** 
    * small helper method to reuse the logic to build the AccountHeader 
    * this will be used to replace the header of the drawer with a compact/normal header 
    * 
    * @param compact 
    * @param savedInstanceState 
    */ 
    private void buildHeader(boolean compact, Bundle savedInstanceState) { 

     IProfile profile_1; 
     //IProfile profile_2; 

     FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

     if (user != null) 
     { 
      String uid = user.getUid(); 
      String name = user.getDisplayName(); 
      String email = user.getEmail(); 
      Uri photoUrl = user.getPhotoUrl(); 

      profile_1 = new ProfileDrawerItem() 
        .withName(name) 
        .withEmail(email) 
        .withIcon(photoUrl); 

      //profile_2 = new ProfileDrawerItem().withName("Isensei").withEmail("[email protected]").withIcon(getResources().getDrawable(R.drawable.ic_user_58dp)); 

      headerResult = new AccountHeaderBuilder() 

        .withActivity(this) 
        .withHeaderBackground(R.drawable.ip_menu_header_bg) 
        .withCompactStyle(compact) 
        .addProfiles(
          profile_1, 
          //profile_2, 

          new ProfileSettingDrawerItem() 
            .withName("Manage Account") 
            .withDescription("Manage your details") 
            .withIcon(new IconicsDrawable(this,GoogleMaterial.Icon.gmd_settings) 
              .actionBar().colorRes(R.color.material_drawer_dark_primary_text)).withIdentifier(PROFILE_MANAGE), 

          new ProfileSettingDrawerItem() 
            .withName("Add Account") 
            .withDescription("Register new account") 
            .withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_person_add) 
              .actionBar().colorRes(R.color.material_drawer_dark_primary_text)).withIdentifier(PROFILE_SETTING) 

        ) 
        .withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() { 

         @Override 
         public boolean onProfileChanged(View view, IProfile profile, boolean current) { 

          //sample usage of the onProfileChanged listener 
          //if the clicked item has the identifier 1 add a new profile ;) 

          if (profile instanceof IDrawerItem && ((IDrawerItem) profile).getIdentifier() == USER_PROFILE) 
          { 
           // Navigate to home fragment 
           FragmentManager manager = getSupportFragmentManager(); 
           FragmentTransaction transaction = manager.beginTransaction(); 
           Fragment fragment = new Fragment(); 

           fragment = new HomeFragment(); 
           transaction.replace(R.id.flContent, fragment); 
           transaction.commit(); 

          } 

          if (profile instanceof IDrawerItem && ((IDrawerItem) profile).getIdentifier() == PROFILE_MANAGE) 
          { 
           // Navigate to home fragment 
           FragmentManager manager = getSupportFragmentManager(); 
           FragmentTransaction transaction = manager.beginTransaction(); 
           Fragment fragment = new Fragment(); 

           fragment = new ManageAccountFragment(); 
           transaction.replace(R.id.flContent, fragment); 
           transaction.commit(); 

          } 

          else if (profile instanceof IDrawerItem && ((IDrawerItem) profile).getIdentifier() == PROFILE_SETTING) 
          { 
           Toast.makeText(MainActivity.this, "ACCOUNT", Toast.LENGTH_SHORT).show(); 

          } 

         /* 
         if (profile instanceof IDrawerItem && ((IDrawerItem) profile).getIdentifier() == PROFILE_SETTING) { 

          IProfile newProfile = new ProfileDrawerItem() 
            .withNameShown(true) 
            .withName("Kensei") 
            .withEmail("[email protected]") 
            .withIcon(getResources().getDrawable(R.drawable.ic_user_58dp)); 

          if (headerResult.getProfiles() != null) { 
           //we know that there are 2 setting elements. set the new profile above them ;) 
           headerResult.addProfile(newProfile, headerResult.getProfiles().size() - 2); 
          } else { 
           headerResult.addProfiles(newProfile); 
          } 
         } 
         */ 

          //false if you have not consumed the event and it should close the drawer 
          return false; 
         } 
        }) 
        .build(); 

     } 

    } 

    /** 
    * Used to create the drawer with all the icons and items 
    */ 
    private void createDrawerBuilder(){ 
     //create the drawer and remember the `Drawer` result object 
     result = new DrawerBuilder() 
       .withActivity(this) 
       .withAccountHeader(headerResult) 
       .withToolbar(mainToolbar) 
       .addDrawerItems(
         new SecondaryDrawerItem().withName(R.string.drawer_services) 
           .withIdentifier(1) 
           .withIconTintingEnabled(true) 
           .withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_device_hub)) 
           .withTag("Bullhorn"), 

         new SecondaryDrawerItem().withName(R.string.drawer_products) 
           .withIdentifier(2) 
           .withIconTintingEnabled(true) 
           .withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_shopping_cart)) 
           .withTag("Bullhorn"), 

         new SecondaryDrawerItem().withName(R.string.drawer_photos) 
           .withIdentifier(3) 
           .withIconTintingEnabled(true) 
           .withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_camera_roll)) 
           .withTag("Bullhorn"), 

         new SecondaryDrawerItem().withName(R.string.drawer_poem) 
           .withIdentifier(4) 
           .withIconTintingEnabled(true) 
           .withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_content_copy)) 
           .withTag("Bullhorn"), 

         new SecondaryDrawerItem().withName(R.string.drawer_archives) 
           .withIdentifier(5) 
           .withIconTintingEnabled(true) 
           .withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_folder_open)) 
           .withTag("Bullhorn"), 

         new SectionDrawerItem().withName(R.string.drawer_section_header).withEnabled(false), 

         new SecondaryDrawerItem().withName(R.string.drawer_settings) 
           .withIdentifier(6) 
           .withIconTintingEnabled(true) 
           .withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_settings)) 
           .withTag("Bullhorn"), 

         new SecondaryDrawerItem().withName(R.string.drawer_feedback) 
           .withIdentifier(7) 
           .withIconTintingEnabled(true) 
           .withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_headset_mic)) 
           .withTag("Bullhorn"), 

         new SecondaryDrawerItem().withName(R.string.drawer_pro) 
           .withIdentifier(8) 
           .withIconTintingEnabled(true) 
           .withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_security)) 
           .withTag("Bullhorn"), 

         new SecondaryDrawerItem().withName(R.string.drawer_logout) 
           .withIdentifier(9) 
           .withIconTintingEnabled(true) 
           .withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_power_settings_new)) 
           .withTag("Bullhorn") 

       ) 
       .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { 
        @Override 
        public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { 
         navigateDrawerItem((int)drawerItem.getIdentifier(), drawerItem); 
         return true; 
        } 
       }) 
       .addStickyDrawerItems(
         new SecondaryDrawerItem().withName(R.string.drawer_all_right_reserved).withIcon(FontAwesome.Icon.faw_copyright).withEnabled(false) 
       ).build(); 

    } 

    /** 
    * Used to navigate to drawer fragment items 
    */ 
    public void navigateDrawerItem(int ItemId, IDrawerItem drawerItem) { 
     // Create a new fragment and specify the fragment to show based on nav item clicked 
     Fragment fragment = null; 
     Class fragmentClass; 
     switch(ItemId) { 
      case 1: 
       fragmentClass = ServicesFragment.class; 
       break; 
      case 2: 
       fragmentClass = ProductsFragment.class; 
       break; 
      case 3: 
       fragmentClass = PhotosFragment.class; 
       break; 
      case 4: 
       fragmentClass = PoemsFragment.class; 
       break; 
      case 5: 
       fragmentClass = ArchivesFragment.class; 
       break; 
      case 6: 
       fragmentClass = SettingsFragment.class; 
       break; 
      default: 
       fragmentClass = HomeFragment.class; 
     } 
     try { 
      fragment = (Fragment) fragmentClass.newInstance(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     // Insert the fragment by replacing any existing fragment 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit(); 
     result.closeDrawer(); 
    } 




    /* 
    private void setUserDetails(){ 
     FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

     if (user != null) 
     { 
      UserProfileChangeRequest profileUpdate = new UserProfileChangeRequest.Builder() 
        .setDisplayName("Jsk Zack") 
        .setPhotoUri(Uri.parse("https://avatarfiles.alphacoders.com/862/86285.jpg")) 
        .build(); 

      user.updateProfile(profileUpdate).addOnCompleteListener(new OnCompleteListener<Void>() { 
       @Override 
       public void onComplete(@NonNull Task<Void> task) { 
        if (task.isSuccessful()) 
        { 
         Log.d(TAG, "onComplete: User Profile updated"); 

         getUserDetails(); 
        } 
       } 
      }); 
     } 
    } 
    */ 



    private void getUserDetails(){ 
     FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

     if (user != null) 
     { 
      String uid = user.getUid(); 
      String name = user.getDisplayName(); 
      String email = user.getEmail(); 
      Uri photoUrl = user.getPhotoUrl(); 

      String properties = 
        "uid: " + uid + "\n" + 
        "name: " + name + "\n" + 
        "email: " + email + "\n" + 
        "photoUrl: " + photoUrl; 

      Log.d(TAG, "getUserDetails: properties: \n" + properties); 
     } 
    } 






    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
     switch (item.getItemId()) { 
      default: 
       return super.onOptionsItemSelected(item); 
     } 

    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     //add the values which need to be saved from the drawer to the bundle 
     outState = result.saveInstanceState(outState); 

     //add the values which need to be saved from the accountHeader to the bundle 
     outState = headerResult.saveInstanceState(outState); 
     super.onSaveInstanceState(outState); 
    } 

    @Override 
    public void onBackPressed() { 
     //handle the back press :D close the drawer first and if the drawer is closed close the activity 
     if (result != null && result.isDrawerOpen()) { 
      result.closeDrawer(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    /** 
    * Display progressbar 
    */ 
    public void showProgress() { 
     findViewById(R.id.progressBar).setVisibility(View.VISIBLE); 
    } 

    /** 
    * Hide progressbar 
    */ 
    public void hideProgress() { 
     if(mProgressBar.getVisibility() == View.VISIBLE){ 
      findViewById(R.id.progressBar).setVisibility(View.INVISIBLE); 
     } 
    } 

    /** 
    * Used to relaunch the application 
    */ 
    public void restartApp() { 
     Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
     startActivity(intent); 
     finish(); 
    } 

} 

이것이 작동하지 않는 이유는 무엇입니까?

+0

어떻게'''showProgress''와''hideP 로스트''? – zhh

+0

의 'mUpdateBtn.setOnClickListener (new View.OnClickListener() {}') – Jonas

+0

버튼을 클릭 한 후 두 메서드를 호출합니다. – Jonas

답변

0

나는 때문에

findViewById(R.id.progressBar).setVisibility(View.INVISIBLE); 

그냥 당신의 주요 활동에서 onCreate() {HERE}에서의 ProgressBar를 인스턴스화하고 숨기기 및 표시 기능에 mProgressBar을 사용하여이 코드 라인의 생각

public void showProgress() { 
    mProgressBar .setVisibility(View.VISIBLE); 
} 

희망 하시겠습니까?)