Though i have been looking around, couldn't find the correct answer. In my navigation drawer header I provide user with his image and name, But i also allow the user to change his/her name and image from the app. These changes are stored in session manager. Now i want to reflect these changes in my navigation drawer header. Everything is working fine because when i close the app and run it again it shows the changes. So for now what i need is a way to refresh the navigation drawer header.
Select image from gallery in Profile Fragment.
private void onSelectFromGalleryResult(Intent data) {
String selectedImagePath = getPathFromCameraData(data, getActivity());
Bitmap bm;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(selectedImagePath, options);
final int REQUIRED_SIZE = 200;
int scale = 1;
while (options.outWidth / scale / 2 >= REQUIRED_SIZE
&& options.outHeight / scale / 2 >= REQUIRED_SIZE)
scale *= 2;
options.inSampleSize = scale;
options.inJustDecodeBounds = false;
bm = BitmapFactory.decodeFile(selectedImagePath, options);
bitmap = bm;
profilephoto = BitMapToString(bm);
session.setprofilepic(profilephoto);// make changes in session.
profilepic.setImageBitmap(bm);
}
Homepage activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_homepageactivity);
session = new SessionManager(getApplicationContext());
mTitle = mDrawerTitle = getTitle();
topToolBar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(topToolBar);
//topToolBar.setLogo(R.drawable.logo);
topToolBar.setLogoDescription(getResources().getString(R.string.logo_desc));
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
LayoutInflater inflater = getLayoutInflater();
listHeaderView = inflater.inflate(R.layout.header_list, null, false);
//ImageView profile = (ImageView)listHeaderView.findViewById(R.id.profile_picture);
TextView name = (TextView)listHeaderView.findViewById(R.id.headername);
profilepic = (ImageView)listHeaderView.findViewById(R.id.profile);
user = session.getUserDetails();
profilepic.setImageBitmap(StringToBitMap(user.get(SessionManager.KEY_PROFILEPIC)));
name.setText(user.get(SessionManager.KEY_NAME));
mDrawerList.addHeaderView(listHeaderView); ////// HEADER ADDED
List<ItemObject> listViewItems = new ArrayList<ItemObject>();
listViewItems.add(new ItemObject("Attendance", R.drawable.attendance));
// listViewItems.add(new ItemObject("Time table", R.drawable.timetable));
// listViewItems.add(new ItemObject("Class 1", R.drawable.classicon));
adapter = new CustomAdapter(this, listViewItems);
mDrawerList.setAdapter(new CustomAdapter(this, listViewItems));
mDrawerToggle = new ActionBarDrawerToggle(Homepageactivity.this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
getSupportActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getSupportActionBar().setTitle(mDrawerTitle);
profilepic.setImageBitmap(StringToBitMap(user.get(SessionManager.KEY_PROFILEPIC)));
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.setDrawerIndicatorEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// make Toast when click
Toast.makeText(getApplicationContext(), "Position " + position, Toast.LENGTH_LONG).show();
selectItemFragment(position);
}
});
}
Though I am really sorry for posting the answer this late. I resolved my problem by refreshing the header whenever I open the drawer or we can when onDrawerOpened is called.
mDrawerToggle = new ActionBarDrawerToggle(Homepageactivity.this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
getSupportActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getSupportActionBar().setTitle(mDrawerTitle);
session = new SessionManager(getApplicationContext());
user = session.getUserDetails();
profilepic.setImageBitmap(StringToBitMap(user.get(SessionManager.KEY_PROFILEPIC)));
name.setText(user.get(SessionManager.KEY_NAME));
lastsynced.setText(lastsynced());
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With