2011-02-06 5 views
4

내 게임의 모든 레벨을 표시하는보기가 있습니다. 이 레벨은 활동에서 읽은 다음보기로 전달됩니다. 나는 그것들을 견해에서 읽을 수 있지만, 그것은 정말로 그 책임이 아니며, 나는 우려를 분열시키는 팬이다.Android :보기에 데이터를 전달하는 가장 좋은 방법은 무엇입니까?

는 지금, 나는이에 대한 세터를 호출하고 있습니다 :

((GameView) findViewById(R.id.game)).setLevels(loadLevels()); 

그러나, 내가 세터를 호출하는 것을 잊지 경우 뷰가 역기능이 될 것이라는 사실을 좋아하지 않는다. 레벨을 통과시키는 더 좋은 방법이 있습니까?

답변

2

추측 취향의 문제이다. 이론적으로 당신이하는 것처럼 레벨을 통과하는 것은 완벽합니다. 또는 수준을 설정하는 것 이상을 필요로하지만 수준을 저장하는 등의 추가 기능을 제공하려면 일반적으로 저장소 (예 : 저장소, 일부 "관리자"클래스 등)를 처리하는 별도의 클래스를 사용합니다. 그런 다음이 클래스는 생성자의보기로 s.t.로 전달됩니다. 사람은 그것을 제공해야만한다. 물론, 물건을 분리하기 위해서, 나는 특정 구현보다 인터페이스를 사용합니다. 다음과 같이 다음 보일 수 있습니다 :

public class MyView { 

    public MyView(ILevelLoader levelLoader){ 
     this.levelLoader = levelLoader; 
    } 

    ... 
} 

는 종종이 작동하지 않을 수 있습니다, 뷰 프레임 워크 않고 직접 응용 프로그램 인스턴스 무언가가 있기 때문이다. 그런 상황에서는 적절한 세터를 통해 강요해야합니다. 그것은 일종의 MVC/MVP 패턴입니다.

여러분의 관심에 부응하기 위해 IoC containers 및 종속성 주입을 살펴볼 수도 있습니다. Google에서 제공하는 Guice은 이미 Android에서 사용한 멋진 프레임 워크입니다.

+0

나는 Guice를 보았지만 내가하고 싶은 것을 발견하지 못했다. 내가 뭐 놓친 거 없니? – futlib

+0

아니요 Guice와 의존성 주입은 단지 당신이 "관심사의 분리"를 좋아한다고 말하는 주석과 관련이 있습니다. :) 의존성 주입은 여기에 언급 된 너무 광범위한 주제이므로 웹에서 살펴 보시기 바랍니다. 느슨하게 결합 된 구성 요소를 만드는 관점에서 코딩하는 것이 좋습니다. – Juri

0

요점을 놓치지 않았 으면 좋겠다.하지만 여기는 다음과 같습니다. 일반적으로 기능 설정은 텍스트 뷰와 같은 텍스트이거나 XML에서 설정 한 속성입니다. 사용자 정의보기 요구 사항이 몇 가지에게 있습니다 How to layout a 'grid' of images in the center of the screen

하지만, 예를 취할 수 있습니다 :

내가 문제에있어이 답변 살펴를 인수 'numColumns를'.

  • 당신이 setNumColumns를 사용하여 설정할 수 있습니다
  • 당신이 그것을 무시할 수 있습니다, 그것은 기본값으로 되돌릴 수 있습니다 (즉,()? 당신의 loadLevels에 해당 될 것이다).
  • 당신이 그렇게 속성 사장님로 설정할 수 있습니다 app:numColumns="3"

당신은이 작업을 수행하기 위해 클래스의 속성 또는 기본값을 사용하려고 할 수 있습니다.

+0

그래서 내보기에 setter를 추가하면 app : propertyName을 사용하여 XML에서 호출 할 수 있습니까? 좋았지 만 일련의 레벨을 전달하는 방법을 상상할 수는 없습니다. – futlib

0

추상적 인 방법으로 추상적 인 클래스를 만들 수 있습니다. getLevels()? 이 방법은 클래스를 인스턴스화 할 때 코드를 전달하지 않는다면 컴파일되지 않습니다. 이것은 더 나은 여부

나는 또한 약간의 취향의 문제입니다 :)

+0

안드로이드 SDK에서 내보기가 실제로 인스턴스화 되었기 때문에 이것이 작동하지 않을 것이라고 생각합니다. XML 레이아웃 파일에 추가했습니다. – futlib

관련 문제