我有一个surfaceview类,其中有一个方法updateValue()。此表面视图位于片段(framelayout)内。我试图从片段类调用方法updateValue()。但它没有用。
public class ImageSurface extends SurfaceView implements SurfaceHolder.Callback {
......
public void updateValue(int message){
.......
}
}
声明此surfaceview的xml文件。 fragment_main.xml --->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.paint.drawx.MainActivity$PlaceholderFragment" >
<com.paint.drawx.ImageSurface
android:id ="@+id/imagesurface1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
activity_main.xml中
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Framelayout to display Fragments -->
<FrameLayout
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</FrameLayout>
<fragment android:name="com.paint.drawx.DrawTools"
android:id="@+id/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#FF889911"
/>
</android.support.v4.widget.DrawerLayout>
片段类----
public static class PlaceholderFragment extends Fragment {
ImageSurface imageSurface;
public PlaceholderFragment() {
//imageSurface = (ImageSurface)findViewById(R.id.imagesurface1);
}
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
imageSurface = (ImageSurface)activity.findViewById(R.id.imagesurface1);
}
public void setMessage(int mess){
try{
imageSurface.updateValue(mess);////////this is not working. gives error nullpoint exception
}catch(Exception e){
Log.d("error","is"+e.toString());
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
setRetainInstance(true);
return rootView;
}
}
在上面的类中有一个方法setMessage,我从该方法调用ImageSurface类的方法updateValue,但它给出了零点异常。我究竟做错了什么 。
提前致谢。
答案 0 :(得分:0)
我从onAttach()方法
中删除了这一行imageSurface = (ImageSurface)activity.findViewById(R.id.imagesurface1);
并将此行插入onCreateView()
imageSurface = (ImageSurface) rootView.findViewById(R.id.imagesurface1);
并且每件事情都很好