每当我在 Activity 的 onCreate 中使用 findViewById 时,我都会收到 NullPointerException。例如:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
TextView mTextView = (TextView) findViewById(R.id.textview);
}
我读到问题可能是当我尝试查找 View 时 View 可能未完全加载,这就是为什么我得到一个空指针。如果我在 Activity fragment 的 onCreateView 中调用 findViewById,则一切正常:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
TextView mTextView = (TextView) rootView.findViewById(R.id.textview);
}
但是,我需要在这个 fragment 类之外使用mTextView。我在Android的官方文档中看到了很多在Activity的onCreate中使用findViewById的例子。我做错了什么?
最佳答案
从布局 xml 中,将您的 textview
放入布局 xml- activity_main
中,以便 Activity 的 setContentView
可以在那里找到它。
当前 textview
位于布局 xml fragment_main
仅供引用:fragment_main
和 activity_main
是两种不同的布局。如果您的应用程序结构不需要 fragment ,那么您根本不需要它。
关于android - onCreate中调用findViewById时出现NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24759904/