ListView和自定义SurfaceView在同一个片段中

时间:2016-09-11 15:51:58

标签: java android listview android-fragments surfaceview

我正在编写自定义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中同时包含CustomSurfaceViewmyFragment的正确工作方法是什么?

1 个答案:

答案 0 :(得分:0)

问题在于我没有被构造函数定义为正确的规范。

将此代码添加到CustomSurfaceView.java,删除了error inflating崩溃:

public CustomSurfaceView(Context context, AttributeSet attrs) {
  super(context, attrs);
}