2017-03-01 5 views
0

android 데이터 바인딩에 문제가 있습니다. 예 : activity_main.xml/land/activity_main.xml 등의 다른 구성을위한 레이아웃이 있습니다. 현재 setContentView 메소드를 사용할 때 레이아웃 이름을 전달하면 자동으로 레이아웃 중 어느 것을 선택하여 컨텐츠보기를 설정해야하는지 감지합니다.여러 레이아웃을 사용하는 Android 데이터 바인딩

하지만 데이터 바인딩을 사용하면 그 해결책이 될 것입니다. 바인딩의 이름은 구성에 따라 다를 수 있음을 압니다. 그래서 ActivityMainBinding을 사용하면 항상 동일한 레이아웃의 데이터 바인딩이됩니다. 마커 (각 설정에 대한 bool)를 지정하고 if/else 문을 사용하여 필요한 바인딩을 팽창시키는 솔루션에 대해 읽었으나 그렇게 나쁜 솔루션입니다.

은 사람이 활동/조각은 다른 구성을위한 레이아웃/포트/sw600 포트/토지 등

덕분에 다른 레이아웃을 사용하는 경우에 더 나은 솔루션을 제안 할 수 있습니다!

답변

2

당신은 그냥 같은 방법을 사용할 수 있습니다

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ActivityMainBinding binding = DataBindingUtil.setContentView(this, 
     R.layout.activity_main); 
    // set all variables in binding 
} 

일치하는 모든 레이아웃의 바인딩에 대한 기본 클래스 될 것입니다 생성되고 모든 변수/필드의 집계가됩니다 ActivityMainBinding 클래스입니다. Views가 일부 레이아웃에만있는 경우 일부 구성에서는 필드 참조 중 일부가 null이되므로 일부를 참조해야합니다. 대부분 데이터 바인딩 식을 사용하여 값을 설정하거나 이벤트 처리기를 연결하는 경우 View 필드 참조를 사용할 필요가 없으므로 걱정할 필요가 없습니다.

다른 레이아웃에서보기의 유형이 다른 경우보기 필드에 공통 기본 클래스가 사용됩니다.

빌드 폴더를 보면 생성 된 코드를 볼 수 있습니다. 그것이 어떻게 구현되는지 보는 것이 흥미로울 것입니다.

+0

감사합니다. @ 조지! 정말 좋은 대답입니다! – sromanov