更新材料导航抽屉头

时间:2015-06-18 10:14:31

标签: android navigation-drawer material-design

我正在使用最近Google提供的支持库将导航抽屉添加到我的应用中。在导航抽屉的标题中,我定义了一个CircleImageView来设置用户的个人资料照片,下面是他的名字。

enter image description here

所有这些信息首先由用户在应用程序的第一次启动时定义,因此当mainActivity启动时,图像和名称将加载到标头中。但我正在给用户提供在应用程序内修改这些内容的机会。如果用户转到配置文件frag,并选择新图像作为配置文件图片,或者如果他更改了名称,则此参数将不会在导航抽屉的标题中更新,直到应用程序关闭并再次加载。

这就是我在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;
            }
        });
    }

没有必要实现DrawerLayout.DrawerListener,但是如上图所示,我已经完成了尝试实时更新标头。这些实现了下一个方法:

@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) {
}

在onDrawerOpened()方法中,我使用了我在onCreate中使用的相同代码来加载配置文件pic和名称。这应该在每次打开抽屉时更新这些参数,但是没有这样做,在我关闭并重新打开应用程序之前,仍然不会更新标题。

1 个答案:

答案 0 :(得分:3)

在onCreate中,我需要定义下一个代码,以便能够实时更新导航抽屉的标题:

Promise.map(URLS, function (item) {
    return request.postAsync({url: item}).spread(function (response,body) {
    var items = JSON.parse(body)
    return items
}, { concurrency: 1})