Android Jetpack片段过渡

时间:2020-08-12 15:10:19

标签: android kotlin android-jetpack-navigation

您好我尝试了几种导航解决方案,但是我正在跟踪android开发人员的代码实验室,它也无法正常工作。所以我在这个项目中使用view Binding。 反正这里是..

选项片段..

package com.example.navigationpractice

import android.content.Context
import android.os.Bundle
import android.text.TextUtils.replace
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentController
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import androidx.navigation.NavController
import androidx.navigation.Navigation
import androidx.navigation.Navigation.findNavController
import androidx.navigation.fragment.findNavController
import com.example.navigationpractice.Utils.inTransaction
import com.example.navigationpractice.databinding.FragmentOptionsBinding
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.fragment_options.*

class OptionsFragment : Fragment() ,View.OnClickListener{

    lateinit var _binding:FragmentOptionsBinding

    val binding get()=_binding

    lateinit var navController:NavController



    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding=FragmentOptionsBinding.inflate(layoutInflater)
        val view=binding.root

        val fragmentA=FragmentA()
        val fragmentB=FragmentB()
        val fragmentC=FragmentC()
        val mainActivity=MainActivity()

        binding.buttonA.setOnClickListener {
           // (activity as MainActivity).inTras

//            val transaction=childFragmentManager.beginTransaction()
//            transaction.replace(R.id.main_frame,fragmentA)
//            transaction.addToBackStack(null)
//            transaction.commit()
        }

        binding.buttonB.setOnClickListener {
            findNavController().navigate(R.id.action_optionsFragment_to_fragmentB)

        }

        binding.buttonC.setOnClickListener {

//            val transaction=fragmentManager?.beginTransaction()
//            transaction?.replace(R.id.main_frame,fragmentC)
//            transaction?.addToBackStack(null)
//            transaction?.commit()


        }
        return view
    }

    fun AppCompatActivity.replaceFragment(frameId:Int,fragment:Fragment){
        supportFragmentManager.inTransaction(applicationContext) { replace(frameId, fragment) }

    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        navController=findNavController(view)
        _binding.buttonA.setOnClickListener(this)
        _binding.buttonB.setOnClickListener(this)
        _binding.buttonC.setOnClickListener(this)

    }

    override fun onClick(p0: View?) {
        when(p0){
           // buttonA ->navController.navigate(R.id.action_optionsFragment_to_fragmentA)
            buttonB ->navController.navigate(R.id.action_optionsFragment_to_fragmentB)
            buttonC ->navController.navigate(R.id.action_optionsFragment_to_fragmentC)

        }

    }
}

如您所见,我也尝试过以不同的方式来实现它,我也实现了onClickListener,但是当我一键单击时,我可以看到选项片段,在它上面的是fragmentB,我点击了它就好像没有执行一样它应该在导航jetpack的后台进行替换的替换方法。

在主要活动中,我做..

   _binding=ActivityMainBinding.inflate(layoutInflater)
        setContentView(_binding.root)
        val optionsFragment=OptionsFragment()

        supportFragmentManager.inTransaction(this) {
            add(R.id.main_frame,optionsFragment)
        }

导航图...

<?xml version="1.0" encoding="utf-8"?>
<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/navigation_graph"
    app:startDestination="@id/optionsFragment">
    <fragment
        android:id="@+id/optionsFragment"
        android:name="com.example.navigationpractice.OptionsFragment"
        android:label="fragment_options"
        tools:layout="@layout/fragment_options" >
        <action
            android:id="@+id/action_optionsFragment_to_fragmentA"
            app:destination="@id/fragmentA" />
        <action
            android:id="@+id/action_optionsFragment_to_fragmentB"
            app:destination="@id/fragmentB" />
        <action
            android:id="@+id/action_optionsFragment_to_fragmentC"
            app:destination="@id/fragmentC" />
    </fragment>
    <fragment
        android:id="@+id/fragmentA"
        android:name="com.example.navigationpractice.FragmentA"
        android:label="fragment_a"
        tools:layout="@layout/fragment_a" />
    <fragment
        android:id="@+id/fragmentB"
        android:name="com.example.navigationpractice.FragmentB"
        android:label="fragment_b"
        tools:layout="@layout/fragment_b" />
    <fragment
        android:id="@+id/fragmentC"
        android:name="com.example.navigationpractice.FragmentC"
        android:label="fragment_c"
        tools:layout="@layout/fragment_c" />
</navigation>

我也尝试了导航操作,但效果不佳..

0 个答案:

没有答案