3

我有一个在 XML 布局 (activity_trajectory.xml) 中使用的自定义视图 (CoordinateGridView):

  <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 无法实例化。

Android 图形编辑器中的错误

这是我在自定义视图中的构造函数:

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();
    }
}

关于这里的问题有什么想法吗?无法在图形编辑器中看到任何内容令人沮丧,因为我的自定义视图阻止了布局中的所有其他视图......

4

2 回答 2

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.

于 2013-07-18T23:28:16.380 回答
0

我在使用Android Holo ColorPicker时遇到了完全相同的问题。

该问题是由 Manifest xml 文件中声明的 API 版本引起的。

我将 android:minSdkVersion="11" 更改为 android:minSdkVersion="8" 并且问题消失了。

于 2013-10-08T13:23:08.353 回答