배경 : 이전에 this 질문 : 비슷한 주제에 대해 Java 클래스의 인스턴스 변수를 Android 개발의 해당 레이아웃 파일로 전달하는 방법에 대해 질문했습니다. 쉽게 할 수있는 방법이 없으므로 다음은 xml 파일과 클래스가 서로 이야기하게하는 좋은 방법을 찾는 후속 질문입니다.안드로이드 개발에서 클래스와 XML 레이아웃 사이의 통신
질문 : 게임을 개발 중입니다. (자바 스윙의 거의 완성품으로, 지금은 Android 앱으로 바꾸고 있습니다). 그것은 차별적 인 크기의 체스 판과 체스 조각이있는 여러 레벨을 포함합니다 - 모든 의도와 목적을 위해, 그것은 플레이어가 이전 퍼즐을 해결 한 후에 다른 크기의 보드에 새로운 퍼즐을 표시하는 체스 퍼즐 응용 프로그램입니다. 비즈니스 로직은 완전하지만 그래픽 작업을하고 있습니다. 게임 시작시 해당 레이아웃 xml 파일 fragment_board.xml
이있는 정적 클래스 BoardFragment
(BoardContainer.class에 포함됨)은 보드 크기 (GridLayout)와 첫 번째 레벨에 해당하는 체스 조각을 표시하고 레벨이 완료되면 업데이트됩니다. 설명을 위해, 코드가 다소 다음과 같다 (내 실제 문제를보고 끝으로 건너 뛰기) : 단순하고 공간을 하나의 이미지 만 버튼을 XML 파일에 현재이지만, 앱 것을
//Here is BoardFragment.class, static class contained by BoardContainer:
public static class BoardFragment extends Fragment {
public BoardFragment() {
}
public int level=0;
public void buttonPressed(View view) {
//method that will advance the game and update "level"
//depending on which button was clicked
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_board,
container, false);
return rootView;
}
}
//This is fragment_board.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.example.exampletest.MainGame$BoardFragment" >
<android.support.v7.widget.GridLayout
xmlns:app="schemas.android.com/apk/res-auto"
android:id="@+id/gridView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:columnCount="4" >
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="49dp"
android:layout_height="49dp"
android:contentDescription="@null"
android:onClick="buttonPressed"
android:src="@drawable/grid11" />
</android.support.v7.widget.GridLayout>
</RelativeLayout>
참고 : 실제로 숫자는 해당 클래스의 "level"인스턴스 변수에 따라 달라야합니다 (따라서 level==5
일 경우 app:columnCount==6
등). 그러나 나는 어떻게 그것을 commmunicate 할 것인지 확신하지 못합니다. 클래스 파일에서 XML로. 전혀 가능합니까? 사실, 레벨이 완료되면 보드 크기와 조각 수 모두가 변경되어야합니다. 이 작업을 수행해야합니까
각 레벨마다 하나의 XML 프래그먼트 파일이 있습니까? 그런 다음 이전 질문은 해결되지만 많은 수준에서 많은 조각 파일로 이어질 것입니다.
레벨이 완료되면서 하나의 조각 xml 파일이 업데이트됩니까?
감사합니다.
고마워, 이건 최고 품질의 대답이다. 나는 이클립스에서 ("android.support.v7.widget.GridLayout"을 가진 영원한 문제들) 오랫동안 실행시키지 못했고, 지금은 나를 넘어서서 새로운 .xml 파일들을 찾을 수 없다. Android Studio로 전환하면서 모든 것을 설치하고 실행하는 즉시이 방법을 시도해 보겠습니다. – Sid
"cell"변수가 정의되지 않았습니다. "cellView"를 의미합니까? 그럼에도 불구하고 왜 null 포인터 예외가 발생하는지, 확실하지는 않습니다. – Sid
@Sid : 예, "cellView"를 의미했습니다. 원래는 "셀"이라고 이름을 정했고 이름을 바꿀 때 참조를 업데이트하는 것을 잊었습니다 (게시 입력 상자에 코드를 직접 작성했습니다). 나는 그것을 바로 잡았다. _that_ 라인에서'NullPointerException'을 얻는다면,'boardLayout'이 null이라는 것을 의미합니다. 그리드 레이아웃 리소스에 "gridView"라는 id를 가진'View'가 없다는 것을 의미합니다. – corsair992