我正在使用两个不同布局的标签创建一个应用程序,这意味着我现在有三个总布局:
activity_main, fragment_receive, fragment_send
在我的主要活动中的onCreate方法中,以下行将我的内容视图设置为activity_main。 (如果有人能解释为什么这个布局看起来是空白的,但我的应用程序仍然显示两个标签,那就太好了。)
setContentView(R.layout.activity_main);
然后我使用findViewById方法将TextView设置为出现在fragment_receive.xml和fragment_send.xml中的视图。
currentExchangeRate = (TextView) findViewById(R.id.exchangeRateView);
然后我尝试在此TextView上使用setText方法。
currentExchangeRate.setText(Double.toString(lastPrice));
这一行给了我NullPointerException。
任何人都可以向我解释这个吗?
答案 0 :(得分:0)
findViewById()
的 Activity
,在Activity
的观看次序层次中查找ID。
如果要在Fragment
层次结构上执行此操作,则必须从Fragment
视图中调用它,例如view.findByById()
Fragment
onCreateView
膨胀布局后。
答案 1 :(得分:0)
致电时:
currentExchangeRate = (TextView) findViewById(R.id.exchangeRateView);
编译器发现静态int ID确实存在于您的R.id中,因为您在片段中声明了它们,因此不会抛出编译器错误。但是在运行时,当前视图布局(使用setContentView(R.layout.activity_main)设置的布局;)不保存该ID,因此返回null。
要从Controlling Activity访问Fragment中存在的textview,可以使用Fragment Manager(在activity 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));
答案 2 :(得分:0)
findViewById
从您的活动布局中检索具有请求ID 的视图
要获取片段的文本视图,请创建片段onCreateView
返回静态变量并在onCreateView.
然后你可以像这样检索文本视图:
TextView textview = (TextView) YourFragmentTitle.yourFragmentViewTitle.findViewById(R.id.yourId);