我有一个自定义视图(CoordinateGridView),我在XML布局中使用(activity_trajectory.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设置布局的Activity:
public class TrajectoryActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
removeActionBar();
setContentView(R.layout.activity_trajectory);
initializeViews();
loadSettings();
}
}
有关此问题的任何想法吗?令人沮丧的是无法在图形编辑器中看到任何内容,因为我的自定义视图阻止了布局中的所有其他视图......
答案 0 :(得分:6)
您在图形布局中出现错误的原因是图形编辑器尝试使用它自己的Context实例化您的视图并且它获得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
。
答案 1 :(得分:0)
我使用Android Holo ColorPicker时遇到了完全相同的问题。
问题是由Manifest xml-file中声明的API版本引起的。
我将android:minSdkVersion =“11”更改为android:minSdkVersion =“8”并且问题已经消失。