English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Fragment의 생성 및 소개
Android는 다양한 장치에서 실행됩니다. 작은 스마트폰부터, 매우 큰 태블릿과 텔레비전까지 다양합니다. 화면 크기의 차이를 고려하여, 많은 경우에는 먼저 스마트폰용 앱을 개발하고, 그 후 복사하여 레이아웃을 수정하여 태블릿이나 매우 큰 화면에 맞게 조정합니다. 하나의 앱이 스마트폰과 태블릿 모두에 적응할 수 없을까요?当然了, 있어야 합니다. Fragment는 이러한 문제를 해결하기 위해 등장했습니다. Fragment를 Activity의 인터페이스의 일부로 볼 수 있으며, Activity의 인터페이스는 전적으로 다른 Fragment로 구성될 수 있습니다. 더욱이, Fragment는 자신의 생명주기를 가지고 있으며, 사용자 이벤트를 수신하고 처리할 수 있습니다. 이렇게 되면 Activity에서 많은 컨트롤러 이벤트 처리 코드를 작성할 필요가 없습니다. 더 중요한 것은, 어떤 Fragment를 동적으로 추가하거나 대체하거나 제거할 수 있다는 것입니다.
어제 Android의 Fragment를 공부했습니다. 공식 웹사이트의 가이드를 따라 BlankFragment라는 클래스를 생성하고, Fragment를 상속받았습니다. 그런 다음 컴파일할 때 오류가 발생했습니다:
오류: ':app:processDebugManifest' 작업 실행 실패 > Manifest 결합 실패 : Attribute meta-data#android.support.VERSION@value value=(26.0.0-beta1) from [com.android.support:design:26.0.0-beta1] AndroidManifest.xml에도 존재합니다:28:13-41 [com.android.support:support-v4:26.1.0] AndroidManifest.xml에도 존재합니다:28:13-35 value=(26.1.0). 추천: <meta에 'tools:replace="android:value"' 추가-data> AndroidManifest.xml의 요소:26:9-28:44 to override.
조사해보니, 모두가 다양한 말을 합니다. 가장 신뢰할 수 없는 것은 manifest 파일의 태그를 android:name에서 class로 변경하는 것입니다. 로그를 보면 버전에 따라 문제가 있음을 명확히 알 수 있습니다! 나중에 버전과 호환되는 해결책을 찾았습니다. app 디렉토리의 build.gradle에 다음 코드를 추가해야 합니다:
configurations.all {}} resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '26.0.0-beta1' } } } }
시도해보니 정말 좋아졌습니다. 하지만 이 정도로 만족할 수는 없습니다.
참고하면, 추가된 이 부분 위에 코드는 프로젝트의 의존 라이브러리를 설명하고 있습니다:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.0.0-beta1' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.android.support:design:26.0.0-beta1' implementation 'com.android.support:support-v4:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:0.5' androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2' }
그리고 이 줄 아래에는 빨간 선이 있습니다:
implementation 'com.android.support:appcompat-v7:26.0.0-beta1'
마우스를 올려다대면 표시됩니다:
모든 com.android.support 라이브러리는 정확한 동일 버전 스펙ifik레이션을 사용해야 합니다 (버전의 혼합은 실행 시 런타임 충돌로 이어질 수 있습니다). 버전이 발견되었습니다 26.1.0, 26.0.0-beta1. 예제는 com.android.support:support-compat:26.1.0 하고 com.android.support:animated-vector-drawable:26.0.0-beta1
이렇게 명확하게 설명하고 있습니다: com.android.support에 의존하는 모든 라이브러리는 같은 버전을 사용해야 합니다! Dependency에서 보면, com.android.support:appcompat-v7:26.0.0-beta1와 com.android.support:support-v4:26.1.0 두 버전은 충돌합니다! git의 기록을 보면,26.1.0라는 줄은 새로 추가된 것이며, 꽤 명확하게 BlankFragment 클래스를 새로 만들 때 AndroidStudio가 자동으로 추가한 것입니다. 다시 로그를 보면, 정말로 같은 의미를 말하고 있나요?
AndroidStudio를 풍자해 보려고 합니다. 버전 의존성을 자동으로 추가하려고 했는데, 버전 호환성도 함께 확인했지 않았나요? 그렇지 않으면, 우리가 직접 하지 않을래요. 이런 반자동화된 것은 가장 미친 것입니다. 가장 속이는 것입니다.
또한, gradle 파일의 문법도 흥미롭습니다. 주석은 C/C++의 스타일, 함수 선언은 Python의 스타일이며, Lambda 표현식은 C#의 느낌이 듭니다.
요약
위에 설명한 것은 저가 여러분에게 소개한 Android가 fragment를 추가한 후 버전 불일치 문제에 대해 설명한 것입니다. 여러분에게 도움이 되길 바랍니다. 어떤 질문이나 의문이 있으면 댓글을 남겨 주시기 바랍니다. 저는 즉시 답변을 드리겠습니다. 또한, 나락 강의 사이트에 대한 여러분의 지지에 깊이 감사드립니다!
성명서: 이 문서는 인터넷에서 가져왔으며, 저작권자는 본인입니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공 편집 처리를 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 문제가 있으면 이메일을 보내 주시기 바랍니다: notice#oldtoolbag.com(이메일을 보내면, #을 @으로 변경해 주세요. 신고하고 관련 증거를 제공하시면, 실제로 확인되면, 이 사이트는 즉시 위반 내용을 삭제합니다.)