2012-02-13 60 views
0

時,我有一個佈局文件(layout/my_test.xml):NullPointerException異常:設置TextView的價值

<TextView 
     android:id="@+id/my_title" 
     android:gravity="left|center_vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     /> 

我的活動:

import android.support.v4.app.FragmentActivity; 
import android.view.View; 
import android.widget.TextView; 

public class MyActivity extends FragmentActivity{ 

    private View myTestView;  
    private TextView actionBarTitle; 

    @Override 
    protected void onCreate(Bundle arg0) { 
     super.onCreate(arg0); 

     myTestView = getLayoutInflater().inflate(R.layout.my_test, null); 
     myTitle = (TextView) findViewById(R.id.my_title); 

     //NullPointerException here !! 
     myTitle.setText(getString(R.string.hello)); 
    } 
} 

(我相信這個問題是不是關於res/strings.xml,因爲「他LLO」字符串資源已經在這是很好的其他地方使用。)

爲什麼NullPointerException異常當我設置TextView內容?

完整的錯誤跟蹤:

Caused by: java.lang.NullPointerException 
E/AndroidRuntime(17283): at com.test.MyActivity.onCreate(MyActivity.java:21) 
E/AndroidRuntime(17283): at com.eficode.card.CardActivity.onCreate(CarActivity.java:29) 
E/AndroidRuntime(17283): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
E/AndroidRuntime(17283): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669) 
E/AndroidRuntime(17283): ... 11 more 
+0

你沒有設置任何東西在屏幕上顯示? – waqaslam 2012-02-13 15:15:32

回答

4

創建的TextView ID如下myTitle =(TextView的)myTestView .findViewById(R.id.my_title);

+0

嗨!謝謝,現在好了。但你能解釋爲什麼我不能直接在Activity中使用findViewById嗎? – 2012-02-13 15:23:16

+0

很高興與你合作,她沒有。 – 2013-10-04 14:08:56

0

你應該正確地寫你的onCreate,因爲你沒有設置任何東西在屏幕上顯示:

@Override 
    protected void onCreate(Bundle arg0) { 
     super.onCreate(arg0); 
     setContentView(R.layout.my_test); 

     myTitle = (TextView) findViewById(R.id.my_title); 

     myTitle.setText(getString(R.string.hello)); 
    } 
+0

不,我不同意你的看法,因爲Activity不必總是設置內容。我使用@ Venkata Krishna的答案後,我的代碼正常工作。 – 2012-02-13 15:25:10

+0

是的,你可能會保持你的活動空白,但如果你不希望它顯示在任何地方,甚至在你的活動TextView的點什麼?這正是android-developer所說的:「一項活動是用戶可以做的一件單獨的,專注的事情。幾乎所有的活動都與用戶交互,所以Activity類負責爲你創建一個窗口,在這個窗口中你可以使用setContentView(View)來放置你的UI。' – waqaslam 2012-02-13 15:28:29

0

,你只能得到ID的直接意見的佈局,在聲明的setContentView(R.layout .your_layout_id);但是當你膨脹一些佈局時,你必須在膨脹視圖中獲得視圖的id,如下view_id.find ....();

+0

謝謝你,好點。 – 2012-02-13 16:26:19