2

每當我在我的Activity的onCreate中使用findViewById時,我得到一個NullPointerException。例如:當在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); 
} 

我已閱讀,這個問題可能是由該意見可能不完全當我試圖找到他們,這就是爲什麼我得到一個空指針加載。如果我呼籲findViewById在我的活動的片段onCreateView,一切工作正常:

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用在Activity的onCreate中。我究竟做錯了什麼?

+0

你不是在片段上使用setContentView,也不是在onCreate上操作佈局http://developer.android.com/guide/components/fragments.html –

+0

我應該在哪裏操作佈局呢? – iguarna

回答

2

從佈局xmls中,將您的textview放置在佈局xml- activity_main中,以便活動的setContentView可以在其中找到它。

目前textview是在佈局XML fragment_main

FYI:fragment_mainactivity_main是兩個不同的佈局。如果你的應用程序結構不要求片段,那麼你根本不需要它。

+0

這就是我所缺少的。非常感謝你的回答。 – iguarna

+0

不客氣。接受,upvote運作良好:)感謝很多是可選的 – user2450263

1

,你可以嘗試這樣的事情 -

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(); 

} 
} 

它不是最好的解決辦法,但會爲你現在的工作。

相關問題