【发布时间】:2017-01-19 03:49:45
【问题描述】:
我正在编写自定义 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)。
所以我的问题是:我做错了什么,将ListView 和CustomSurfaceView 包含在同一个myFragment 中是正确的工作方式?
【问题讨论】:
标签: java android listview android-fragments surfaceview