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
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.
cosa è l'uso di picExists? – SAM
@SAM controlla semplicemente se c'è una foto del profilo salvata dall'utente. Non è rilevante per la domanda, quindi ho cancellato – masmic
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