Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[Android] Fragment, Navigation, 본문

Project/대중교통 길찾기

[Android] Fragment, Navigation,

Seung__ 2022. 5. 1. 20:20

1. Fragment?


Fragment는 FragmentActivity내의 어떤 동작 또는 사용자 인터페이스의 일부를 나타냄.

한마디로 Fragment는 activity의 모듈식 섹션.

프래그먼트는 항상 액티비티 내에서 호스팅되어야 하며 해당 프래그먼트의 수명 주기는 호스트 액티비티의 수명 주기에 직접적으로 영향을 받는다.

자세한 내용은 아래 공식문서 참고.

 

프래그먼트  |  Android 개발자  |  Android Developers

A Fragment represents a behavior or a portion of user interface in an Activity. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section

developer.android.com

 

2. Navigation


탐색은 사용자가 앱 내의 여러 콘텐츠를 탐색하고, 그곳에 들어갔다 나올 수 있게 하는 상호작용을 의미합니다

Navigation은 아래 세 가지 주요 부분으로 구성된다.

  • 탐색 그래프: 모든 탐색 관련 정보가 하나의 중심 위치에 모여 있는 XML 리소스입니다. 여기에는 대상이라고 부르는 앱 내의 모든 개별적 콘텐츠 영역과 사용자가 앱에서 갈 수 있는 모든 이용 가능한 경로가 포함됩니다.
  • NavHost: 탐색 그래프에서 대상을 표시하는 빈 컨테이너입니다. 대상 구성요소에는 프래그먼트 대상을 표시하는 기본 NavHost 구현인 NavHostFragment가 포함됩니다.
  • NavController: NavHost에서 앱 탐색을 관리하는 객체입니다. NavController는 사용자가 앱 내에서 이동할 때 NavHost에서 대상 콘텐츠의 전환을 오케스트레이션합니다.
 

탐색  |  Android 개발자  |  Android Developers

Android Jetpack의 탐색 구성요소를 사용하여 앱에서 탐색 구현

developer.android.com

 

3. 화면 구성


화면은 다음과 같이 검색 화면과 결과 화면으로 구성 할 계획이다.

fragment로 구성했으며, 검색 화면의 버튼을 누를 때 navController를 통해 결과 화면으로 바꿀 것이다.

이 때 SearchFragment에서 Server로부터 검색 결과를 가져온는데 이 data를 ResultFragment에 전달할 필요가 있다.

이 때에는 ViewModel을 사용할 예정이다.

 

4. ViewModel


View로부터 독립적이며, view가 필요한 데이터를 소유한다.

viewModel을 Activity또는 Fragment와 생명주기를 같이한다. 

따라서 만약 activityViewModel을 사용한다면 activity에서 viewModel을 공유하기 때문에

fargment간 data 공유가 가능해진다.

 

다음과 같이 필요한 데이터를 가지고 있는 viewModel을 만들 수 있다.

class JsonResultViewModel: ViewModel() {

    private val mutableResultData = MutableLiveData<JsonResult>()

    val resultData: LiveData<JsonResult> get() = mutableResultData

    fun setResultDate(resultData: JsonResult){
        mutableResultData.value = resultData
    }
}

Fragment간 data를 공유할 시 activityViewModels()

class SearchFragment : Fragment() {

    private val viewModel: JsonResultViewModel by activityViewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

    }

 

'Project > 대중교통 길찾기' 카테고리의 다른 글

[Android] Retrofit  (0) 2022.05.01
Json Viewer 추천  (0) 2022.05.01
[Android, Kotlin] JSON to Kotlin Class  (0) 2022.04.30
Background Process : nohup  (0) 2022.04.19
[Android] API 요청  (0) 2022.04.19
Comments