我正在编写一个自定义的SurfaceView实现:
CustomSurfaceView.java
public class CustomSurfaceView extends SurfaceView {
private void init() { }
// ...
}
我想从片段myFragment
调用CustomSurfaceView
。我在网上能找到的每个例子都是这样做的
class myFragment extends Fragment {
// ...
public View onCreateView() {
return new CustomSurfaceView(getActivity());
}
}
这种方法的问题是,我在myFragment
中也有一个ListView,myList
。它是这样工作的:
my_fragment.xml
<LinearLayout>
<ListView id="@+id/my_list"/>
<SurfaceView id="@+id/custom_surface_view"/>
</LinearLayout>
myFragment.java
class myFragment extends Fragment {
// ...
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
myList = (ListView) view.findViewById(R.id.my_list);
return view;
}
}
这种配置在没有CustomSurfaceView
的情况下工作得很好。
然后,我尝试在myList = ...
之后添加
customSurfaceView = (CustomSurfaceView) view.findViewById(R.id.custom_surface_view);
这将导致Unexpected cast to CustomSurfaceView: layout tag was SurfaceView
。
如果在我的xml布局文件中将<SurfaceView/>
更改为<com.example.CustomSurfaceView/>
,我会得到一个运行时崩溃(Binary XML : Error inflating class com.example.CustomSurfaceView
)。
所以我的问题是:我做错了什么?在同一个myFragment
中同时包含ListView
和CustomSurfaceView
的正确、有效的方法是什么?
发布于 2016-09-11 19:12:00
问题是我没有通过构造函数来定义合适的规范。
将以下代码添加到CustomSurfaceView.java
中删除了error inflating
崩溃:
public CustomSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
}
https://stackoverflow.com/questions/39437917
复制相似问题