2015-06-18 10 views
6

Sto utilizzando la libreria di supporto fornita di recente da Google per aggiungere il cassetto di navigazione alla mia app. Nell'intestazione del cassetto di navigazione, definisco una CircleImageView per impostare la foto del profilo dell'utente, sotto il suo nome.Aggiornamento dell'intestazione del cassetto di navigazione del materiale

enter image description here

tutte queste informazioni, viene inizialmente definita dall'utente nel primo avvio dell'applicazione, in modo che quando si avvia il mainActivity, l'immagine e il nome vengono caricati nell'intestazione. Ma sto dando all'utente la possibilità di modificarli all'interno dell'app. Se l'utente accede al profilo frag e seleziona una nuova immagine come immagine del profilo, o se cambia il nome, questi parametri non verranno aggiornati nell'intestazione del cassetto di navigazione, fino a quando l'app non verrà chiusa e caricata di nuovo.

Ecco come l'ho definito in mainActivity:

public class MainActivity extends AppCompatActivity implements DrawerLayout.DrawerListener { 

private NavigationView navView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     .... 

     navView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override public boolean onNavigationItemSelected(MenuItem menuItem) { 
       menuItem.setChecked(true); 
       displayFragment(menuItem.getItemId()); 
       drawerLayout.closeDrawers(); 
       return true; 
      } 
     }); 
    } 

Non v'è alcuna necessità di attuare DrawerLayout.DrawerListener, ma come si è visto nella parte superiore, l'ho fatto per cercare di aggiornare l'intestazione in tempo reale. Questi strumenti i prossimi metodi:

@Override 
public void onDrawerSlide(View drawerView, float slideOffset) { 
} 
@Override 
public void onDrawerOpened(View drawerView) { 
     try { 
      ContextWrapper cw = new ContextWrapper(getApplicationContext()); 
      File directory = cw.getDir("profile", Context.MODE_PRIVATE); 
      File mypath = new File(directory, "thumbnail.png"); 
      Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(mypath)); 
      thumbview.setImageBitmap(bitmap); 
      username = mPreferences.getString("NAME", null); 
      nameview.setText(username); 
     } catch (FileNotFoundException e) { 
      Log.e("LOAD_IMAGE", e.getMessage(), e); 
      thumbview.setImageResource(R.drawable.default_thumbnail); 
     } 
} 
@Override 
public void onDrawerClosed(View drawerView) { 
} 
@Override 
public void onDrawerStateChanged(int newState) { 
} 

Nel metodo onDrawerOpened(), ho usato lo stesso codice che uso nel onCreate per caricare il pic profilo e il nome. Questo dovrebbe aggiornare questi parametri ogni volta che il cassetto viene aperto, ma non lo fa, continua a non aggiornare l'intestazione finché non chiudo e riapro l'app.

+0

cosa è l'uso di picExists? – SAM

+0

@SAM controlla semplicemente se c'è una foto del profilo salvata dall'utente. Non è rilevante per la domanda, quindi ho cancellato – masmic

+0

il tuo profilo potrebbe non essere salvato quindi controllalo inserendo un 'log' nella parte' else'. e hai fornito il nome 'thumbnail.png' per verificare se lo stai salvando con lo stesso nome? – SAM

risposta

1

In onCreate, ho bisogno di definire il codice successivo, per essere in grado di aggiornare in tempo reale nell'intestazione del cassetto di navigazione:

public class MainActivity extends AppCompatActivity implements DrawerLayout.DrawerListener { 

    private DrawerLayout drawerLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     drawerLayout.setDrawerListener(this); 
     ... 
+0

Come hai implementato il triangolo while? Ho provato un pulsante e ho cercato di rendere la mia ImageView cliccabile, non riuscivo nemmeno a trovare la vista, dice null object. – TPWang

+0

L'immagine dell'OP è solo un esempio di ciò che volevo ottenere. Non ho implementato quel triangolo bianco. scusa ma non posso aiutare – masmic