Android 在onCreate中调用findViewById时出现NullPointerException
每当我在活动的onCreate中使用findViewById时,就会得到一个NullPointerException。例如:Android 在onCreate中调用findViewById时出现NullPointerException,android,android-activity,android-fragments,android-view,findviewbyid,Android,Android Activity,Android Fragments,Android View,Findviewbyid,每当我在活动的onCreate中使用findViewById时,就会得到一个NullPointerException。例如: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { get
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);
}
我已经读到,问题可能是当我试图查找视图时,视图可能没有完全加载,这就是为什么我会得到一个空指针。如果我在活动片段的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);
}
但是,我需要在这个片段类之外使用mTextView。我在Android的官方文档中看到了很多例子,其中findViewById用于活动的onCreate。我做错了什么?从布局xmls中,将您的
textview
放在布局xml-activity\u main
中,以便活动的setContentView
可以在那里找到它
当前textview
位于布局xmlfragment\u main
仅供参考:
fragment\u main
和activity\u main
是两种不同的布局。如果你的应用程序结构不需要片段,那么你根本就不需要它。你可以试试这样的东西-
class MainActivity extends Activity{
public TextView tv;
protected void onCreate(Bundle savedInstance){
......
}
public void doActionOnTextView()
{
//at this point you have the textview in tv
// do what you want to do with it
}
}
class MyFragment extends Fragment{
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);
mTextView.postRunnable(new Runnable(){
((MainActivity)getActivity()).tv=mTextView;
((MainActivity)getActivity()).doActionOnTextView();
}
}
这不是最好的解决方案,但现在对您有效。您不需要在Fragment上使用setContentView,也不需要在onCreate上操作布局。那么我应该在哪里操作布局呢?这就是我所缺少的。非常感谢你的回答,不客气。接受,向上投票很有效:)多谢是可以选择的