Android 在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

每当我在活动的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);
}
我已经读到,问题可能是当我试图查找视图时,视图可能没有完全加载,这就是为什么我会得到一个空指针。如果我在活动片段的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
位于布局xml
fragment\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上操作布局。那么我应该在哪里操作布局呢?这就是我所缺少的。非常感谢你的回答,不客气。接受,向上投票很有效:)多谢是可以选择的