【问题标题】:Android: Failed to instantiate a Custom View in XMLAndroid:无法在 XML 中实例化自定义视图
【发布时间】:2013-07-18 23:10:07
【问题描述】:

我有一个在 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 无法实例化。

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

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

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

【问题讨论】:

    标签: android eclipse android-layout android-view


    【解决方案1】:

    在图形布局中出现错误的原因是图形编辑器试图使用它自己的 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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-24
        • 1970-01-01
        • 2019-03-10
        • 1970-01-01
        • 1970-01-01
        • 2012-12-02
        相关资源
        最近更新 更多