我正在编写自定义SurfaceView实现:
CustomSurfaceView.java
:
public class CustomSurfaceView extends SurfaceView {
private void init() { }
// ...
}
我想从片段CustomSurfaceView
拨打myFragment
。我可以在网上找到的每个例子都是通过
class myFragment extends Fragment {
// ...
public View onCreateView() {
return new CustomSurfaceView(getActivity());
}
}
这种方法的问题是我在myList
中也有一个ListView myFragment
。它的工作原理如下:
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
)崩溃。
所以我的问题是:我做错了什么,以及在同一ListView
中同时包含CustomSurfaceView
和myFragment
的正确工作方法是什么?
答案 0 :(得分:0)
问题在于我没有被构造函数定义为正确的规范。
将此代码添加到CustomSurfaceView.java
,删除了error inflating
崩溃:
public CustomSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
}