2013-07-18 50 views
3

我有一個自定義視圖(CoordinateGridView),我使用一個XML佈局(activity_trajectory.xml):安卓:無法實例化自定義視圖中的XML

<com.android.catvehicle.CoordinateGridView 
     android:id="@+id/coordinateGrid" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" /> 

我得到這個錯誤在圖形編輯器:**。CoordinateGridView無法實例化。

Error in Android Graphical Editor http://i42.tinypic.com/2w3b9f5.png

這是我的自定義視圖的構造函數:

public CoordinateGridView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setFocusable(true); 
     setFocusableInTouchMode(true); 
     this.setOnTouchListener(this); 
     hostActivity = (TrajectoryActivity) this.getContext(); 
} 

而這正是我設置了CoordinateGridView佈局,它的活動:

public class TrajectoryActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     removeActionBar(); 
     setContentView(R.layout.activity_trajectory); 
     initializeViews(); 
     loadSettings(); 
    } 
} 

任何關於這個問題的想法?令人沮喪的是,無法在圖形編輯器中看到任何東西,因爲我的自定義視圖阻止了佈局中的所有其他視圖...

回答

6

您在圖形佈局中出現錯誤的原因是圖形編輯器嘗試實例化您的視圖使用它自己的上下文,它會得到ClassCastException。所以你應該使用View.isInEditMode()來消除視圖處於編輯模式,然後跳過不必要的步驟。例如:

public CoordinateGridView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setFocusable(true); 
    setFocusableInTouchMode(true); 
    this.setOnTouchListener(this); 
    if (!isInEditMode()) hostActivity = (TrajectoryActivity) this.getContext(); 
} 

,你應該在其他地方,在那裏你使用hostActivity使用同樣的事情。

0

我有使用Android Holo ColorPicker完全相同的問題。

該問題是由在Manifest xml文件中聲明的API版本引起的。

我將android:minSdkVersion =「11」更改爲android:minSdkVersion =「8」,問題消失了。

相關問題