2015-05-06 68 views
0

我有一個SurfaceView作爲片段的視圖,我想從SurfaceView中的片段訪問變量diffRadius。我將如何去訪問片段中的get函數。Android - 如何訪問兒童SurfaceView片段中的方法?

片段代碼

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(); 
} 

讓我知道如果你需要更多的代碼。

回答

1

你不想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不會在意。