gpt4 book ai didi

Android:无法在 XML 中实例化自定义 View

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:39 25 4
gpt4 key购买 nike

我有一个在 XML 布局 (activity_trajectory.xml) 中使用的自定义 View (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 无法实例化。

Error in Android Graphical Editor

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

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

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

最佳答案

图形布局出错的原因是图形编辑器试图使用它自己的 Context 来实例化您的 View ,并且它获得了 ClassCastException。因此,您应该使用 View.isInEditMode() 来确定 View 是否处于编辑模式,然后跳过不必要的步骤。例如:

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

你应该在其他地方使用同样的东西,在那里你使用 hostActivity

关于Android:无法在 XML 中实例化自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com