2011-01-19 58 views
1

早上好鄉親一個NullPointerException,自定義部件拋出的setRequestedViewSize

我工作的一個Android應用程序,我已經遇到一個有點問題。我創建了一個擴展View的新類。我重寫了適當的方法(構造函數,onDraw,onMeasure),並通過應用程序佈局XML(稱爲main.xml)實例化視圖。

在我的應用程序的源代碼,我有以下代碼:

public class CustomViewTest extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

/* I *think* I need to setContentView before I actually can use any of the widgets on the form. */ 
     setContentView(R.layout.main);  
     Button b = (Button)findViewById(R.id.button); 

     b.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
    // TODO Auto-generated method stub 
// my new widget 
newWidget s = (newWidget)findViewById(R.id.testWidget); 
s.setRequestedViewSize(300); 
    } 

     }); 


    } 
} 

這裏的問題是,s.setRequestedViewSize(300)拋出一個NullPointerException。有沒有人遇到過,或可以借給我一些建議?

[編輯] main.xml中看起來是這樣的:

它返回null,但XML是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <com.testing.CustomViewTest02.newWidget 
     android:id="@+id/testWidget" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
    <Button android:id="@+id/button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      ></Button> 
</LinearLayout> 

謝謝你! 山姆

回答

2

的問題是在我的窗口小部件,我有正確的構造函數(上下文的背景下的AttributeSet attr)使用;但是 - super(context)被稱爲 - 而不是super(context, attr).一旦我解決這個問題,生活就會更好。

感謝您的信息大家!

1

你必須與R.id.testWidget ID沒有觀點:這不是關於非靜態方法。由於findViewById()返回null,下一行將引發異常。

0

你引用您的main.xml中自定義視圖? @Pontus是對的。沒有視圖從findViewById()方法返回。

如果在onCreate方法中調用構造函數,然後將其設置爲可見或將其添加到另一個視圖(無論您嘗試使用它),那麼最好在onCreate方法中引用它。按鈕被點擊。

編輯:根據你上面的XML。您的自定義類是否實現了一個帶有Context和AttributeSet的構造函數?具有AttributeSet的構造函數是Android將調用來從XML佈局創建類的構造函數。

+0

是的,這顯示* *精細(我只是畫就是查看不同的顏色暫時的,直到這個問題解決)。只有當我按下按鈕時,我纔會得到一個強制關閉。 – Sam 2011-01-19 14:20:21

相關問題