在activity_main.xml外部的文本视图上调用 setText 时出现 NullPointerExceptio



我正在使用两个具有不同布局的选项卡制作应用程序,这意味着我目前总共有三个布局:

activity_main,fragment_receive,fragment_send

在我的主活动的 onCreate 方法中,以下行将我的内容视图设置为 activity_main。(如果有人能解释为什么这个布局看起来是空白的,但我的应用程序仍然显示两个选项卡,那就太好了。

setContentView(R.layout.activity_main);

然后,我使用 findViewById 方法将文本视图设置为同时显示在fragment_receive.xml和fragment_send.xml中的视图。

currentExchangeRate = (TextView) findViewById(R.id.exchangeRateView);

然后,我尝试在此文本视图上使用 setText 方法。

currentExchangeRate.setText(Double.toString(lastPrice));

这一行给了我 NullPointerException。

谁能向我解释一下?

findViewById()

Activity调用,在Activity视图的层次结构中查找id。

如果要在Fragment层次结构上执行此操作,则必须在膨胀布局后从Fragment视图中调用它,例如view.findByById()Fragment onCreateView调用它。

当您调用时:

currentExchangeRate = (TextView) findViewById(R.id.exchangeRateView);

编译器发现静态 int ID 确实存在于您的 R.id 中,因为您在片段中声明了它们,因此不会引发编译器错误。但在运行时,当前视图布局(使用 setContentView(R.layout.activity_main) 设置的布局;)不保存该 ID,因此返回 null。

要从控制活动访问片段中存在的文本视图,请使用片段管理器(在活动 xml 中向片段添加 id 属性,或在代码中声明片段时设置标记):

ReceiveFragment receiveFragment = (ReceiveFragment) getSupportFragmentManager().findFragmentById(R.id.receive_fragment);
TextView tv = (TextView) receiveFragment.getView().findViewById(R.id.exchangeRateView);
tv.setText(Double.toString(lastPrice));
findViewById

活动的布局中检索具有请求 ID 的视图

要获取片段的文本视图,请创建片段onCreateView返回静态变量的视图,并在onCreateView.中对其进行初始化

然后,您可以像这样检索文本视图:

TextView textview = (TextView) YourFragmentTitle.yourFragmentViewTitle.findViewById(R.id.yourId);

相关内容

最新更新