国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android:單Activity多Fragment,Navigation實(shí)現(xiàn)Fragment跳轉(zhuǎn),F(xiàn)ragment之間通過ViewModel共享數(shù)據(jù)

這篇具有很好參考價值的文章主要介紹了Android:單Activity多Fragment,Navigation實(shí)現(xiàn)Fragment跳轉(zhuǎn),F(xiàn)ragment之間通過ViewModel共享數(shù)據(jù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1、MainActivity

1、activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragmentContainerView"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/nav_graph" />
</androidx.constraintlayout.widget.ConstraintLayout>

2、MainActivity

/**
 * kotlin_jetpack_navigation
 * 使用navigation  + dataBinding + viewModel
 * 三個fragment共享一個viewModel中的數(shù)據(jù),在NavigationView中顯示
 */
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

2、HomeFragment, DetailFragment

  • FragmentA:包括SeekBar和一個按鈕,點(diǎn)擊button跳轉(zhuǎn)到FragmentB
  • FragmentB:SeekBar加一和減一操作的按鈕,一個返回FragmentA的按鈕,即經(jīng)過加減操作以后,在FragmentA上顯示加減的結(jié)果。

Android:單Activity多Fragment,Navigation實(shí)現(xiàn)Fragment跳轉(zhuǎn),F(xiàn)ragment之間通過ViewModel共享數(shù)據(jù)
nav_graph.xml

<navigation 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:id="@+id/nav_graph"
    app:startDestination="@id/homeFragment">

    <fragment
        android:id="@+id/detailFragment"
        android:name="cn.hk.navigation3.DetailFragment"
        android:label="fragment_detail"
        tools:layout="@layout/fragment_detail" >
        <action
            android:id="@+id/action_detailFragment_to_homeFragment"
            app:destination="@id/homeFragment" />
    </fragment>
    <fragment
        android:id="@+id/homeFragment"
        android:name="cn.hk.navigation3.HomeFragment"
        android:label="fragment_home"
        tools:layout="@layout/fragment_home" >
        <action
            android:id="@+id/action_homeFragment_to_detailFragment"
            app:destination="@id/detailFragment" />
    </fragment>
</navigation>

2.1、HomeFragment

Android:單Activity多Fragment,Navigation實(shí)現(xiàn)Fragment跳轉(zhuǎn),F(xiàn)ragment之間通過ViewModel共享數(shù)據(jù)1、fragment_home.xml

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <data>
        <variable
            name="data"
            type="cn.hk.navigation3.MyViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".HomeFragment">


        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_begin="320dp"
            app:layout_constraintGuide_percent="0.5" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{String.valueOf(data.number)}"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/guideline"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/guideline" />

        <SeekBar
            android:id="@+id/seekBar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toTopOf="@+id/textView"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

2、HomeFragment

class HomeFragment : Fragment() {


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
//        val myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
        val myViewModel by activityViewModels<MyViewModel>()
        val binding = DataBindingUtil.inflate<FragmentHomeBinding>(
            inflater, R.layout.fragment_home, container, false
        )
        binding.also {
            it.data = myViewModel
            it.lifecycleOwner = activity
            it.button.setOnClickListener { v ->
                val controller = Navigation.findNavController(v)
                controller.navigate(R.id.action_homeFragment_to_detailFragment)
            }
            myViewModel.get().value?.also { numberValue ->
                it.seekBar.progress = numberValue
            }
            it.seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
                override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
                   myViewModel.set(p1)
                }

                override fun onStartTrackingTouch(p0: SeekBar?) {
                }

                override fun onStopTrackingTouch(p0: SeekBar?) {
                }

            })
        }

        return binding.root
    }

2.2、DetailFragment

Android:單Activity多Fragment,Navigation實(shí)現(xiàn)Fragment跳轉(zhuǎn),F(xiàn)ragment之間通過ViewModel共享數(shù)據(jù)1、fragment_detail.xml

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <data>
        <variable
            name="data"
            type="cn.hk.navigation3.MyViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".DetailFragment">


        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_begin="320dp"
            app:layout_constraintGuide_percent="0.5" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{String.valueOf(data.number)}"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/guideline"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="add"
            android:onClick="@{()->data.count(1)}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/jian"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/guideline" />

        <Button
            android:id="@+id/jian"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="cut"
            android:onClick="@{()->data.count(-1)}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/add"
            app:layout_constraintTop_toTopOf="@+id/guideline" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="返回"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/add" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

2、DetailFragment文章來源地址http://www.zghlxwxcb.cn/news/detail-402607.html

class DetailFragment : Fragment() {


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
//      val myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
        val myViewModel by activityViewModels<MyViewModel>()
        val binding = DataBindingUtil.inflate<FragmentDetailBinding>(
            inflater,
            R.layout.fragment_detail,
            container,
            false
        )
        binding.also {
            it.data = myViewModel
            it.lifecycleOwner = activity
            it.button3.setOnClickListener { v ->
                val controller = Navigation.findNavController(v)
                controller.navigate(R.id.action_detailFragment_to_homeFragment)
            }
        }
        return binding.root
    }

}

3、MyViewModel

class MyViewModel : ViewModel() {
    var number: MutableLiveData<Int> = MutableLiveData(0)

    fun get() = number

    fun set(result: Int) {
        number.value = result
    }


    fun count(x: Int) {
        number.value = number.value?.plus(x)
        if (number.value!! < 0)
            number.value = 0
    }
}

參考

到了這里,關(guān)于Android:單Activity多Fragment,Navigation實(shí)現(xiàn)Fragment跳轉(zhuǎn),F(xiàn)ragment之間通過ViewModel共享數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Jetpack】Navigation 導(dǎo)航組件 ④ ( Fragment 跳轉(zhuǎn)中使用 safe args 安全傳遞參數(shù) )

    【Jetpack】Navigation 導(dǎo)航組件 ④ ( Fragment 跳轉(zhuǎn)中使用 safe args 安全傳遞參數(shù) )

    代碼地址 : CSDN ( 本博客代碼快照 | 推薦下載 0 積分 ) : https://download.csdn.net/download/han1202012/88251933 GitHub ( 可能已經(jīng)覆蓋 ) : https://github.com/han1202012/Navigation 1、Navigation 組件中的 Bundle 數(shù)據(jù)傳遞 之前的 默認(rèn) Navigation 跳轉(zhuǎn)方法 , 只需要傳入 navigation 資源 ID , 即可完成頁面跳轉(zhuǎn) ; Nav

    2024年02月11日
    瀏覽(23)
  • Android Navigation 導(dǎo)航切換fragment用法

    對于Android Navigation組件的導(dǎo)航到Fragment,您可以按照以下步驟操作: 首先,在您的項(xiàng)目的build.gradle文件中添加Navigation依賴: 在你的res目錄下的navigation文件夾中創(chuàng)建一個nav_graph.xml文件,并定義您的導(dǎo)航圖。 在您的布局文件中,添加NavHostFragment作為導(dǎo)航的目標(biāo)。 在您的Activi

    2024年02月12日
    瀏覽(29)
  • Android Activity和Fragment的對比

    Android Activity和Fragment的對比

    參考來源 參考來源 參考來源 onAttach() 作用:fragment已經(jīng)關(guān)聯(lián)到activity,這個時候 activity已經(jīng)傳進(jìn)來了, 獲得activity的傳遞的值 就可以進(jìn)行 與activity的通信里, 當(dāng)然也可以使用getActivity(),前提是這個fragment已經(jīng)和宿主的activity關(guān)聯(lián),并且沒有脫離,有且只有調(diào)用一次。 onCreate(

    2024年02月11日
    瀏覽(22)
  • Android adb命令獲取當(dāng)前Activity或者Fragment

    Android adb命令獲取當(dāng)前Activity或者Fragment

    用adb命令查看下面Demo處于 NO.3 Fragment 時的 Activity 和 Fragment 信息。 輸出結(jié)果如下: 上面的 com.example.who/com.example.who.ui.activity.SecondActivity} 可以分成兩部分看: / 前的部分是包名, / 后的部分是當(dāng)前 Activity 的類全名。 該命令會輸出堆棧中全部的窗口信息。 輸出結(jié)果如下, Se

    2024年02月15日
    瀏覽(26)
  • 【Android】怎么使用一個ViewModel用在多個Activity或者Fragment中

    項(xiàng)目需求 在多個Activity或者Fragment中使用同一個ViewModel 需求實(shí)現(xiàn) 1.使用ActivityScope或FragmentScope 想在一個Activity或Fragment中共享ViewModel實(shí)例,可以使用ActivityScope或FragmentScope。這兩種范圍會根據(jù)它們所綁定的Activity或Fragment自動管理ViewModel實(shí)例的生命周期。 例如,創(chuàng)建一個繼承自

    2024年02月15日
    瀏覽(18)
  • Android Activity重寫dump方法實(shí)現(xiàn)通過adb調(diào)試代碼

    android為我們提供了dump方法。注釋中聲明該方法會將活動的狀態(tài)打印到給定流中,當(dāng)cmd運(yùn)行“adb?shell dumpsys activity”時會調(diào)用此函數(shù)。所以當(dāng)我們要做一些測試,就可以在activity重寫dump函數(shù)編寫我們的測試邏輯。 args是adb傳進(jìn)來的命令參數(shù) 調(diào)用 writer.println?即可將想要打印的東

    2024年02月06日
    瀏覽(24)
  • Activity之間數(shù)據(jù)回傳【Android、activity回傳、結(jié)合實(shí)例】

    Activity之間數(shù)據(jù)回傳【Android、activity回傳、結(jié)合實(shí)例】

    在Android應(yīng)用中,有時需要從一個Activity向另一個Activity傳遞數(shù)據(jù),并在第二個Activity處理后將結(jié)果傳遞回第一個Activity。 這種情況下,我們可以使用 startActivityForResult() 和 onActivityResult() 方法來實(shí)現(xiàn)數(shù)據(jù)回傳。 創(chuàng)建新的Android項(xiàng)目: 打開Android Studio并創(chuàng)建一個新的Android項(xiàng)目,確

    2024年02月08日
    瀏覽(29)
  • Android之Fragment 跳轉(zhuǎn)返回重復(fù)加載重復(fù)執(zhí)行onCreateView的四種解決方法

    前言:? Fragment 跳轉(zhuǎn)返回重復(fù)加載重復(fù)執(zhí)行 onCreateView 的問題通常是因?yàn)?Fragment 生命周期方法的調(diào)用順序和使用不當(dāng)所導(dǎo)致的。 1,onSaveInstanceState()方法 一種解決方法是在 Fragment 中使用 onSaveInstanceState() 方法保存 Fragment 的狀態(tài),并在 onCreate() 方法中進(jìn)行狀態(tài)恢復(fù),避免重復(fù)執(zhí)

    2024年02月06日
    瀏覽(88)
  • 【Android開發(fā)】不同Activity之間的數(shù)據(jù)回傳實(shí)例(一)摘桃子游戲

    【Android開發(fā)】不同Activity之間的數(shù)據(jù)回傳實(shí)例(一)摘桃子游戲

    該項(xiàng)目實(shí)現(xiàn)的功能主要有: 在首頁顯示一個按鈕點(diǎn)擊該按鈕跳轉(zhuǎn)到桃園頁面 在桃園頁面,點(diǎn)擊桃子會彈窗顯示摘到幾個桃子,同時被點(diǎn)擊桃子消失,總桃子數(shù)+1 點(diǎn)擊退出桃園會返回首頁,首頁桃子數(shù)會根據(jù)點(diǎn)擊的桃子數(shù)動態(tài)增加 將項(xiàng)目所需要的圖片bg.png、monkey.png、btn_peac

    2024年01月23日
    瀏覽(34)
  • Android kotlin系列講解(入門篇)使用Intent在Activity之間穿梭

    返回總目錄 上一篇: Android kotlin系列講解(入門篇)Activity的理解與基本用法 ???????你應(yīng)該已經(jīng)對創(chuàng)建 Activity 的流程比較熟悉了,那我現(xiàn)在在 ActivityTest 項(xiàng)目再快速地創(chuàng)建一個 Activity 。 ???????還是右擊 com.example.activitytest 包→ New → Activity → Empty Views Activity ,會彈出

    2024年02月12日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包