2011-12-20 206 views
1

我有一個ViewFlipper定義在一個單獨的類。它看起來像這樣:Android findViewById拋出NullPointerException異常

public class Flipper extends Activity { 
    public ViewFlipper view_flipper; 

    /* Constructor */ 
    public Flipper(int flipper_id) { 
     view_flipper = (ViewFlipper) findViewById(flipper_id); 
    } 
    ... 

然後在另一個活動的onCreate()方法,我實例化翻轉這樣的:

private Flipper flipper; 
flipper = new Flipper(R.id.login_screen_flipper); 

然而,我在翻轉的構造得到了NullPointerException。當我調試時,我看到flipper_id有一個有效的ID。我究竟做錯了什麼?

回答

1

當您在另一個活動中實例化Flipper時,將在Flipper的構造函數中調用findViewById。這是一個來自Flipper類的方法,因爲它擴展了Activity,並且它的調用在構造函數中無效,因爲您沒有設置內容視圖,因爲它通常在Activity.onCreate中完成。 Flipper不應該擴展Activity,並且你應該在構造函數中傳入ViewFlipper而不是id。

+0

謝謝,這救了我!我結束了像這樣實例化我的Flipper: flipper = new Flipper((ViewFlipper)findViewById(R.id.login_screen_flipper),res); – 2011-12-20 20:54:07

3

你不能創建這樣的活動。

要創建一個活動,你必須使用Intents。你必須在XML文件中定義佈局,並使用setContentView(R.layout.layout_name)來附加它;

看一看這個開始學習:https://developer.android.com/training/index.html


UPDATE:

確定,目前還不清楚,你與你的問題的方式完成的事情的。

如果要擴展ViewFlipper的行爲,我建議你擴展它:

package your.package; 

public class MyFlipper extends ViewFlipper { 
    // ... 
} 

然後用它在你的XML是這樣的:

<your.package.ViewFlipper 
    [...] parameters [...] /> 

最後,當你實現它,你可以做它是這樣的:

public class YourActivity extends Activity { 

    public ViewFlipper viewFlipper; 

    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     viewFlipper = (ViewFlipper) findViewById(R.id.login_screen_flipper); 
    } 

    // ... more activity stuff 
} 

PS:這是很好的習慣使用lowerCamelCase Java成員變量中的符號(或Java中的字段)

+0

假設Flipper類不擴展活動。假設它只是一個可重用的ViewFlipper類。那麼爲什麼我需要意向呢? – 2011-12-20 20:19:14

相關問題