我有一个 SurfaceView 作为 fragment 的 View ,我想从 SurfaceView 中的 fragment 访问变量 diffRadius。我将如何访问 fragment 中的 get 函数。
fragment 代码
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对fragment有硬依赖,但你可以通过干扰进行通信
- 创建 RadiusProvider 接口(interface)
- 使 fragment 实现该接口(interface)
- 在 Surface View 中创建一个方法来设置 radiusProvider。
在界面上
public interface RadiusProvider {
int getDiffRadius();
}
在 fragment 上
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 知道如何获取半径,但它不知道有关 fragment 的任何其他信息,并且该 fragment 可以交换为实现 RadiusProvider 的任何其他对象,而 SurfaceView 不会关心。
关于java - Android - 如何从子 SurfaceView 访问 fragment 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30081706/