繁体   English   中英

Android-如何从子SurfaceView的片段中访问方法?

[英]Android - How to access method in fragment from child SurfaceView?

我有一个SurfaceView作为片段的视图,我想从SurfaceView中的片段访问变量diffRadius。 我将如何访问片段中的get函数。

片段代码

public class AsteroidsFragment extends Fragment {

private AsteroidsView asteroidsView;
public int diffRadius;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    super.onCreateView(inflater, container, savedInstanceState);
    View view = inflater.inflate(R.layout.fragment_game, container, false);
    GameActivity activity = (GameActivity) getActivity();
    diffRadius = activity.getDiffRadius();
    asteroidsView = (AsteroidsView) view.findViewById(R.id.asteroidsView);
    return view;
}
public int getDiffRadius()
{
    return diffRadius;
}

SurfaceView代码

public class AsteroidsView extends SurfaceView implements SurfaceHolder.Callback
{
public AsteroidsView(Context context, AttributeSet attrs)
{
    super(context, attrs);
    activity = (Activity) context;

    getHolder().addCallback(this);

    //Set diffRadius to ParentFragment.getDiffRadius()

    asteroidPaint = new Paint();
    backgroundPaint = new Paint();
}

让我知道您是否需要更多代码。

您不希望SurfaceView对片段有严格的依赖性,但可以通过干扰进行通信

  1. 创建一个RadiusProvider接口
  2. 使片段实现该接口
  3. 在“曲面”视图中创建一个用于设置radiusProvider的方法。

在界面上

public interface RadiusProvider {
    int getDiffRadius();
 }

在片段上

public class AsteroidsFragment extends Fragment implements RadiusProvider { 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         ...
        asteroidsView = (AsteroidsView) view.findViewById(R.id.asteroidsView);
        asteroidsView.setRadiusProvider(this);
        return view;
    }

    @Override
    public int getDiffRadius() {
        return diffRadius;
    }

在SurfaceView上

public class AsteroidsView extends SurfaceView implements SurfaceHolder.Callback {
    ....
    public void setRadiusProvider(RadiusProvider radiusProvider) {
        this.radiusProvider = radiusProvider;
    }
}

这样,SurfaceView知道如何获取半径,但对片段一无所知,该片段可以交换为实现RadiusProvider的任何其他对象,而SurfaceView则不在乎。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM