2017-07-24 3 views
1

J'ai construit le tiroir de navigation pour mon projet en suivant this tutorial mais l'image de profil ne s'affiche pas et je n'ai pas trouvé de solution. dans le manifeste android j'ajoute l'autorisation internet.impossible d'afficher l'image de profil dans le tiroir de navigation

Activité principale:

import android.os.Bundle; 
import android.os.Handler; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.NavigationView; 
import android.support.design.widget.Snackbar; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 


import com.bumptech.glide.Glide; 
import com.bumptech.glide.load.engine.DiskCacheStrategy; 

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 
private NavigationView navigationView; 
private DrawerLayout drawer; 
private View navHeader; 
private ImageView imgNavHeaderBg, imgProfile; 
private TextView txtName, txtWebsite; 
private Toolbar toolbar; 
private FloatingActionButton fab; 


private static final String urlNavHeaderBg = "http://api.androidhive.info/images/nav-menu-header-bg.jpg"; 
private static final String urlProfileImg = "http://dl.topnaz.com/2013/09/Newsha-Zeighami-2.jpg"; 


public static int navItemIndex = 0; 


private static final String TAG_HOME = "home"; 
private static final String TAG_PHOTOS = "photos"; 
private static final String TAG_MOVIES = "movies"; 
public static String CURRENT_TAG = TAG_HOME; 


private String[] activityTitles; 


private boolean shouldLoadHomeFragOnBackPress = true; 
private Handler mHandler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    mHandler = new Handler(); 
    navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navHeader = navigationView.getHeaderView(0); 
    txtName = (TextView) navHeader.findViewById(R.id.name); 
    txtWebsite = (TextView) navHeader.findViewById(R.id.website); 
    imgNavHeaderBg = (ImageView) navHeader.findViewById(R.id.img_header_bg); 
    imgProfile = (ImageView) navHeader.findViewById(R.id.img_profile); 
    activityTitles = getResources().getStringArray(R.array.nav_item_activity_titles); 

    fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close){ 
    @Override 
    public void onDrawerClosed(View drawerView) { 
     super.onDrawerClosed(drawerView); 
    } 

    @Override 
    public void onDrawerOpened(View drawerView) { 
     super.onDrawerOpened(drawerView); 
    } 
}; 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    navigationView.setNavigationItemSelectedListener(this); 

    loadNavHeader(); 

    if (savedInstanceState == null) { 
     navItemIndex = 0; 
     CURRENT_TAG = TAG_HOME; 
     loadHomeFragment(); 
    } 
} 

private void loadNavHeader() { 
    // name, website 
    txtName.setText("Ravi Tamada"); 
    txtWebsite.setText("www.androidhive.info"); 

    Glide.with(this).load(urlNavHeaderBg) 
      .crossFade() 
      .diskCacheStrategy(DiskCacheStrategy.ALL) 
      .into(imgNavHeaderBg); 

    Glide.with(this).load(urlProfileImg) 
      .crossFade() 
      .thumbnail(0.5f) 
      .bitmapTransform(new CircleTransform(this)) 
      .diskCacheStrategy(DiskCacheStrategy.ALL) 
      .into(imgProfile); 

    navigationView.getMenu().getItem(3).setActionView(R.layout.menu_dot); 
} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else { 
     super.onBackPressed(); 
    } 
    if (shouldLoadHomeFragOnBackPress) { 
     // checking if user is on other navigation menu 
     // rather than home 
     if (navItemIndex != 0) { 
      navItemIndex = 0; 
      CURRENT_TAG = TAG_HOME; 
      loadHomeFragment(); 
      return; 
     } 
    } 
} 

private void loadHomeFragment() { 
    selectNavMenu(); 

    setToolbarTitle(); 

    if (getSupportFragmentManager().findFragmentByTag(CURRENT_TAG) != null) { 
     drawer.closeDrawers(); 

     toggleFab(); 
     return; 
    } 
    Runnable mPendingRunnable = new Runnable() { 
     @Override 
     public void run() { 
      Fragment fragment = getHomeFragment(); 
      FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
      fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, 
        android.R.anim.fade_out); 
      fragmentTransaction.replace(R.id.frame, fragment, CURRENT_TAG); 
      fragmentTransaction.commitAllowingStateLoss(); 
     } 
    }; 

    if (mPendingRunnable != null) { 
     mHandler.post(mPendingRunnable); 
    } 
    toggleFab(); 

    //Closing drawer on item click 
    drawer.closeDrawers(); 

    // refresh toolbar menu 
    invalidateOptionsMenu(); 
} 

private Fragment getHomeFragment() { 
    switch (navItemIndex) { 
     case 0: 
      // home 
      HomeFragment homeFragment = new HomeFragment(); 
      return homeFragment; 
     case 1: 
      // photos 
      PhotosFragment photosFragment = new PhotosFragment(); 
      return photosFragment; 
     case 2: 
      // movies fragment 
      MoviesFragment moviesFragment = new MoviesFragment(); 
      return moviesFragment; 
     case 3: 
      // notifications fragment 
      NotificationsFragment notificationsFragment = new NotificationsFragment(); 
      return notificationsFragment; 

     case 4: 
      // settings fragment 
      SettingsFragment settingsFragment = new SettingsFragment(); 
      return settingsFragment; 
     default: 
      return new HomeFragment(); 
    } 
} 

private void setToolbarTitle() { 
    getSupportActionBar().setTitle(activityTitles[navItemIndex]); 
} 

private void selectNavMenu() { 
    navigationView.getMenu().getItem(navItemIndex).setChecked(true); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    if (navItemIndex == 0) { 
     getMenuInflater().inflate(R.menu.main, menu); 
    } 

    // when fragment is notifications, load the menu created for notifications 
    if (navItemIndex == 3) { 
     getMenuInflater().inflate(R.menu.notifications, menu); 
    } 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    if (id == R.id.action_mark_all_read) { 
     Toast.makeText(getApplicationContext(), "All notifications marked as read!", Toast.LENGTH_LONG).show(); 
    } 

    if (id == R.id.action_clear_notifications) { 
     Toast.makeText(getApplicationContext(), "Clear all notifications!", Toast.LENGTH_LONG).show(); 
    } 

    return super.onOptionsItemSelected(item); 
} 
private void toggleFab() { 
    if (navItemIndex == 0) 
     fab.show(); 
    else 
     fab.hide(); 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_camera) { 
     // Handle the camera action 
     navItemIndex = 0; 
     CURRENT_TAG = TAG_HOME; 
    } else if (id == R.id.nav_gallery) { 
     navItemIndex = 1; 
     CURRENT_TAG = TAG_PHOTOS; 

    } else if (id == R.id.nav_slideshow) { 
     navItemIndex = 2; 
     CURRENT_TAG = TAG_MOVIES; 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 
    if (item.isChecked()) { 
     item.setChecked(false); 
    } else { 
     item.setChecked(true); 
    } 
    item.setChecked(true); 

    loadHomeFragment(); 

    return true; 

} 

}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:openDrawer="start"> 

<include 
    layout="@layout/app_bar_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header_main" 
    app:menu="@menu/activity_main_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

Répondre

0

Yo doivent d'abord obtenir l'identifiant de navigationView qui tient votre mise en page principale (où vous voulez définir des valeurs). Ajouter une vue où vous jetterez élément zero'th de NavigationView

NavigationView activity_dashboard = findViewById(R.id.nav_view); 
View headerView = activity_dashboard.getHeaderView(0); 

Maintenant, vous êtes bon pour aller avec aller chercher une valeur à l'intérieur de votre mise en page Ci-dessous le code

ImageView profileImageView = headerView.findViewById(R.id.img_header_bg);