【问题标题】:How to programmatically change the Text and Image of the Navigation Header for android如何以编程方式更改 android 导航标题的文本和图像
【发布时间】:2021-07-31 22:57:54
【问题描述】:

我到处寻找,只有这么多人问过这个问题,但到目前为止没有任何效果。我目前正在开发一个基于片段的应用程序,当有人输入他们的 id 时,它会下载他们的姓名和图片。我希望能够在导航标题字段中更改他们的名字。目前这是我正在使用的代码

View header = LayoutInflater.from(getActivity()).inflate(R.layout.nav_header_main, null);
        navigationView.addHeaderView(header);
        test = (TextView) header.findViewById(R.id.username);
        test.setText("HELLO");

我从这里得到的https://code.google.com/p/android/issues/detail?id=190786

我这里也试过这个方法In android how to set navigation drawer header image and name programmatically in class file?

这两个最终都会出现这个错误

FATAL EXCEPTION: main

Process: com.horizonservers.horizon, PID: 4042
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.horizonservers.horizon/com.horizonservers.horizon.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.NavigationView.addHeaderView(android.view.View)' on a null object reference                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void'
android.support.design.widget.NavigationView.addHeaderView(android.view.View)' on a null object reference
at com.horizonservers.horizon.MainFragment.onCreateView(MainFragment.java:153)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:601)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237)
at android.app.Activity.performStart(Activity.java:6253)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

有谁知道如何更改导航标题侧栏的文本和图像? https://gyazo.com/23534130df4aff888708415b368aa1fa

【问题讨论】:

  • 你找到你的答案了吗……我也在寻找答案
  • 据我所知,目前还没有办法做到这一点。我联系了另一个应用程序的开发人员,他的侧边栏正是这样做的,但他说他是从头开始构建的。
  • 任何其他方式来做到这一点..
  • 我这样做的方法是让用户第一次登录。它会取他们的名字和我想要在侧边栏中的任何其他内容,然后将其保存到文本文件中。它自行重新启动并从文本文件中获取字符串。有点难看,但它至少暂时有效......

标签: android android-studio


【解决方案1】:
        NavigationView navigationView = findViewById(R.id.nav_view);
        View header = navigationView.getHeaderView(0);
        test = (TextView) header.findViewById(R.id.username);
        test.setText("HELLO");

也许这会有所帮助!

【讨论】:

    【解决方案2】:

    如果将来有人发现这个,我就能找到一个库,它几乎完全符合我的需要。你可以找到它here

    【讨论】:

      【解决方案3】:

      根据您的错误,navigationView 似乎为空。在膨胀标题之前,请检查以确保正确初始化了 navigationView。根据您使用片段的方式/位置,片段生命周期可能会在标头膨胀之后初始化 navigationView,这将引发 NullPointerException。

      如果不是上述情况,导航标题膨胀已经变得对使用最近对谷歌设计库进行设计更改的 android 环境非常敏感。下面是我的包罗万象的解决方案,也许它对你有用。

      NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
      View header = navigationView.inflateHeaderView(R.layout.nav_header_main);
      test = (TextView) header.findViewById(R.id.username);
      test.setText("HELLO");
      

      【讨论】:

      • 对不起,这没有帮助。我早些时候找到了这个答案并决定尝试一下,但我仍然遇到同样的错误。
      猜你喜欢
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多