Navigation Architecture Component에서 사용할 수 있다는 예감
Google I/O 2018이 추가되었습니다Navigation Architecture Component
에서 설명한 대로 해당 매개변수의 값을 수정합니다.
제가 먼저 말할 수 있도록 허락해 주세요.상당히 편리합니다!!
지금까지 나는 여러 개의 Fragment Transaction의 처리가 복잡하고 난해해진 프로젝트를 겪었다. "no more fragment transaction!!!"예.
해냈어, 구글 씨!!
뭘 할 수 있다고 하면 이름처럼 Fragment를 할 수 있는 Navigatin!w
정부의 언어를 빌려 쓰면 과도 처리의 실현을 간소화할 수 있다.
The Navigation Architecture Component simplifies the implementation of navigation in an Android app.
이번에는 아래 화면으로 이미지를 만들어 보도록 하겠습니다.
로그인 화면
↓
홈 화면 → 프로필 화면
↓
화면 설정
환경
Android Studio 3.2.1(3.2 Preview 버전 필수)
Kotlin
builde.gradle
project/build.gradle 설정
build.gradledependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha01"
...
}
repositories {
google()
...
}
app/build.gradle 설정
build.gradleapply plugin: "androidx.navigation.safeargs"
dependencies {
def nav_version = "1.0.0-alpha01"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // use -ktx for Kotlin
implementation "android.arch.navigation:navigation-ui:$nav_version" // use -ktx for Kotlin
...
}
Navigation Resource
AndroidStudio3.2에 새로 추가된 탐색 리소스 추가
프로젝트의res 디렉터리에서 오른쪽 단추 클릭 → New → AndroidResourceFile를 선택하여 다음 OK 단추로 설정하십시오
File name : nav_graph
Recource type : Navigation
nav_graph.xml 편집
[Text]로 표현하면 네비게이션 태그 처음 봐!<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android">
</navigation>
디자인에서 편집합니다.
이미지를 클릭합니다
↓
"blank distination 만들기"를 누르십시오.
↓
Fragment 이름, xml layout 생성, callback 생성...etc
이번에 LoginFragment, HomeFragment, ProfileFragment, SettingFragment를 제작했습니다.
탐색 전환 흐름을 추가합니다.
로그인 화면
↓
홈 화면 → 프로필 화면
↓
화면 설정
에서 설명한 대로 해당 매개변수의 값을 수정합니다.
iOS의 Storyboard와 가까워서 기분이 좋습니다.
이렇게 과도 절차가 완성된다!
Main Activity
여기서 프레임은 NavHostFragment를 지정합니다.
nav_graph.xml에 정의된 정보는 Bind인 것 같아요!
activity_main.xml<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"/>
</android.support.constraint.ConstraintLayout>
MacinActivity.ktclass MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onSupportNavigateUp()
= findNavController(this, R.id.my_nav_host_fragment).navigateUp()
}
Fragment
클릭 처리 중 다음 이동 목표 설정Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_homeFragment)
나머지 프레임도 똑같이 설치하면 된다.
fragment_login.xml<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
android:background="#000"
tools:context=".LoginFragment">
<Button
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="login"/>
</FrameLayout>
LoginFragment.ktclass LoginFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
var view = inflater.inflate(R.layout.fragment_login, container, false)
var button = view.findViewById<Button>(R.id.login_button);
button.setOnClickListener { view ->
Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_homeFragment)
}
return view
}
}
참조 URL
Reference
이 문제에 관하여(Navigation Architecture Component에서 사용할 수 있다는 예감), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m_saeki/items/e034f51980bb659dda66
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
project/build.gradle 설정
build.gradle
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha01"
...
}
repositories {
google()
...
}
app/build.gradle 설정build.gradle
apply plugin: "androidx.navigation.safeargs"
dependencies {
def nav_version = "1.0.0-alpha01"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // use -ktx for Kotlin
implementation "android.arch.navigation:navigation-ui:$nav_version" // use -ktx for Kotlin
...
}
Navigation Resource
AndroidStudio3.2에 새로 추가된 탐색 리소스 추가
프로젝트의res 디렉터리에서 오른쪽 단추 클릭 → New → AndroidResourceFile를 선택하여 다음 OK 단추로 설정하십시오
File name : nav_graph
Recource type : Navigation
nav_graph.xml 편집
[Text]로 표현하면 네비게이션 태그 처음 봐!<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android">
</navigation>
디자인에서 편집합니다.
이미지를 클릭합니다
↓
"blank distination 만들기"를 누르십시오.
↓
Fragment 이름, xml layout 생성, callback 생성...etc
이번에 LoginFragment, HomeFragment, ProfileFragment, SettingFragment를 제작했습니다.
탐색 전환 흐름을 추가합니다.
로그인 화면
↓
홈 화면 → 프로필 화면
↓
화면 설정
에서 설명한 대로 해당 매개변수의 값을 수정합니다.
iOS의 Storyboard와 가까워서 기분이 좋습니다.
이렇게 과도 절차가 완성된다!
Main Activity
여기서 프레임은 NavHostFragment를 지정합니다.
nav_graph.xml에 정의된 정보는 Bind인 것 같아요!
activity_main.xml<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"/>
</android.support.constraint.ConstraintLayout>
MacinActivity.ktclass MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onSupportNavigateUp()
= findNavController(this, R.id.my_nav_host_fragment).navigateUp()
}
Fragment
클릭 처리 중 다음 이동 목표 설정Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_homeFragment)
나머지 프레임도 똑같이 설치하면 된다.
fragment_login.xml<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
android:background="#000"
tools:context=".LoginFragment">
<Button
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="login"/>
</FrameLayout>
LoginFragment.ktclass LoginFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
var view = inflater.inflate(R.layout.fragment_login, container, false)
var button = view.findViewById<Button>(R.id.login_button);
button.setOnClickListener { view ->
Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_homeFragment)
}
return view
}
}
참조 URL
Reference
이 문제에 관하여(Navigation Architecture Component에서 사용할 수 있다는 예감), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m_saeki/items/e034f51980bb659dda66
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android">
</navigation>
여기서 프레임은 NavHostFragment를 지정합니다.
nav_graph.xml에 정의된 정보는 Bind인 것 같아요!
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"/>
</android.support.constraint.ConstraintLayout>
MacinActivity.ktclass MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onSupportNavigateUp()
= findNavController(this, R.id.my_nav_host_fragment).navigateUp()
}
Fragment
클릭 처리 중 다음 이동 목표 설정Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_homeFragment)
나머지 프레임도 똑같이 설치하면 된다.
fragment_login.xml<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
android:background="#000"
tools:context=".LoginFragment">
<Button
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="login"/>
</FrameLayout>
LoginFragment.ktclass LoginFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
var view = inflater.inflate(R.layout.fragment_login, container, false)
var button = view.findViewById<Button>(R.id.login_button);
button.setOnClickListener { view ->
Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_homeFragment)
}
return view
}
}
참조 URL
Reference
이 문제에 관하여(Navigation Architecture Component에서 사용할 수 있다는 예감), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m_saeki/items/e034f51980bb659dda66
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_homeFragment)
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
android:background="#000"
tools:context=".LoginFragment">
<Button
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="login"/>
</FrameLayout>
class LoginFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
var view = inflater.inflate(R.layout.fragment_login, container, false)
var button = view.findViewById<Button>(R.id.login_button);
button.setOnClickListener { view ->
Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_homeFragment)
}
return view
}
}
Reference
이 문제에 관하여(Navigation Architecture Component에서 사용할 수 있다는 예감), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/m_saeki/items/e034f51980bb659dda66텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)