Android 更新物料导航抽屉标题

Android 更新物料导航抽屉标题,android,navigation-drawer,material-design,Android,Navigation Drawer,Material Design,我正在使用谷歌最近提供的支持库将导航抽屉添加到我的应用程序中。在导航抽屉的标题中,我定义了一个CircleImageView来设置用户的个人资料pic,在它下面是他的名字 所有这些信息首先由用户在应用程序的第一次启动中定义,因此当mainActivity启动时,图像和名称将加载到标题中。但我给了用户在应用程序中修改这些内容的机会。如果用户转到profile frag,并选择一个新图像作为profile pic,或者如果用户更改了名称,则在关闭并再次加载应用程序之前,导航抽屉标题中的此参数不会更

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

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

这是我在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;
            }
        });
    }
没有必要实现DroperLayout.DroperListener,但如上图所示,我这样做是为了实时更新报头。这些实现了以下方法:

@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和名称。这应该在每次打开抽屉时更新这些参数,但没有这样做,直到我关闭并重新打开应用程序,仍然不会更新标题。

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

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);
        ...

picExists有什么用?@SAM它只是检查用户是否保存了个人资料pic。与问题无关,因此我已删除您的配置文件可能未保存,因此请通过在
其他部分中放置
日志来检查它。您已经提供了名称
thumbnail.png
检查您是否使用相同的名称保存它?@SAM正在保存它,因为我在frag中看到了更新的图片和名称。此外,如果我关闭应用程序并重新打开它,它会更新标题。更新标题的方法与我在onCreate中使用的方法相同,因此它工作正常。这里的问题似乎在于必须确定导航抽屉是否正在打开的方法,以及在何处执行这些操作以更新标题。能否向我展示应用标题的代码…?如何实现while三角形?“我尝试了一个按钮,试图使我的ImageView可点击,甚至找不到视图,”null object说。“OP的图片只是我想要实现的一个例子。”。我还没有实现那个白色三角形。对不起,我帮不了你