0

저는 앱을 작성 중이며 일부 조각을 동적으로 추가해야하므로 레이아웃 파일에 정의 할 필요가 없습니다.레이아웃이 변경 될 때 시스템이 동적으로 추가 된 조각에 대한 상태 정보를 유지합니까?

두 개의 main_activity.xml 파일은 하나는 레이아웃에, 다른 하나는 레이아웃 - 랜드에 있습니다. 하지만 많은 성공하지 않고 하나의 MainActivity.java 파일에서 동적으로 그들을 채우려고 노력하고있어. 조각을 만들고 레이아웃을 표시 할 수는 있지만 '구성 변경'을 통해 데이터를 유지할 수는 없습니다. 즉, 방향이 바뀌면 편집 텍스트에 동일한 데이터가 표시됩니다.

두 레이아웃에서 사용 된 조각은 동일하지만 레이아웃 파일의 컨테이너 ID는 다릅니다 (즉, 레이아웃 _ 버전에 '_wide'를 추가합니다). 이게 관련이 있니? 시스템에서 '기억'하기 위해서는 동일해야합니까?

이론상 파편을 얻지 만 구현하려고 할 때 계속 벽돌 벽에 부딪칩니다. 내가하고 싶은 것은 런타임에 동일한 프래그먼트의 인스턴스 x 개를 (선형 레이아웃 컨테이너에) 추가 할 수 있지만 동시에 시스템이 상태 정보를 유지 관리 할 수있게하려는 것입니다. 그것은 가능한가 또는 나가 이것 모두가 어떻게 작동하는지에 관하여 근본 무언가를 놓치고 있는가?

+0

다른 ID를 사용하는 경우에는 소스 코드에서 특별히 처리해야합니다. – LightYearsBehind

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 이것이 어떻게 수행되는지에 대한 좋은 예를 제시하는 질문을 여기서 제안 할 수 있다고 생각하지 않습니까? –

답변

0

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.demo.MainActivity" 
     android:label="@string/app_name" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

같은

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 

날이 유용 여부를 알려 매니페스트 파일에 아래 라인을 사용할 수 있습니까?

+0

일반적으로 ConfigChanged에서 활동 라이프 사이클은 oncreate에서 다시 시작됩니다. 따라서 android : configChanges = "keyboard | keyboardHidden | orientation | screenLayout | uiMode | screenSize | smallestScreenSize"줄을 사용하여 방지하십시오. –

+0

그냥 나와 함께 감내해야합니다. 조금만 돌아 봐야합니다. 나머지 코드는 약간의 작업이 필요할 수도 있습니다. 나는 당신에게 알릴 것이다 :-) –

+0

그것은 하나의 레이아웃에서 작동하지만 다른 것으로 전환하지는 않는다. 또한 이클립스의 테스트 폰에서 여러 가지 설치 과정을 거치며 지속되고있다. 내 조각화 코드가 onCreate에 있습니다 - 다른 곳에 있어야합니까? –

0

결국 거기에 있습니다. 그래서 원래의 질문에 대한 대답은 네입니다. 시스템은 동적으로 추가 된 조각에 대한 상태 정보를 기억합니다.

Doing right means : a) 'layout', layout-land 및 그 밖의 다른 곳에서 main_activity.xml 같은 'resource buckets'의 이름이 같은 레이아웃 파일을 사용하십시오. b) 주어진 조각 (또는 조각)에 대한 모든 컨테이너 ID가 모든 다양한 레이아웃 파일에서 동일해야합니다. 즉, 단편은 하나의 컨테이너 ID와 만 연관 될 수 있지만이 ID는 많은 레이아웃 파일에 나타날 수 있습니다. 나는 id 자체 만 같아야한다는 것을 알았습니다. 컨테이너로 사용되는 viewgroup의 유형은 다른 부분과 관련이없는 것처럼 레이아웃 파일에서 다를 수 있습니다. c) onCreate 메서드에서 조각을 인스턴스화하고 조각 트랜잭션을 통해 컨테이너에 한 번만 추가하면됩니다 (즉, savedinstancestate == null 인 경우). 조각의 배열 사용을 포함하여 동적으로 전체 UI를 만들 수 있으며 시스템은 모든 조각에 대한 모든 상태 정보를 기억하여 사용하는 다음 레이아웃 파일에 적용합니다.

이것이 모두에게 뻔뻔스럽게 명백한 것이면 미안하지만 설명이 필요했습니다.

관련 문제