android-fragments 如何在Kotlin中关闭当前片段中的Button并打开另一个片段

kqqjbcuj  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(159)

我需要创建2个片段和2个按钮在第一个片段一个将关闭当前片段,并开始另一个,第二个将关闭应用程序在所有,我做错了什么(每个片段在不同的持有人)?
第一个片段打开得很好,但当我点击第一个活动中的按钮时,它们根本不工作。
我怎样才能把这个写对呢?
MainActivity.kt

package com.example.webviewapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        supportFragmentManager
            .beginTransaction()
            .replace(R.id.fullcreen_holder, start_fragment.newInstance())
            .commit()

    }

}

起始片段.kt

package com.example.webviewapp

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button

class start_fragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?

    ): View? {
        val view = inflater.inflate(R.layout.layout_start_fragment, container, false)
        val agreeButton: Button = view.findViewById(R.id.privacy_agree)
        val declineButton: Button = view.findViewById(R.id.privacy_decline)
        agreeButton.setOnClickListener{
            requireActivity().getSupportFragmentManager().beginTransaction()
                .replace(R.id.webview_holder, webview_fragment())
                .hide(start_fragment())
                .commit();

        }
        declineButton.setOnClickListener{
            android.os.Process.killProcess(android.os.Process.myPid())
        }
        return inflater!!.inflate(R.layout.layout_start_fragment, container, false)
    }


    companion object {
        @JvmStatic
        fun newInstance() = start_fragment()
    }
}
c9qzyr3d

c9qzyr3d1#

让我们创建一个android资源目录。该目录名为navigation。然后我们创建navigation资源文件。该文件将具有nav_graph.xml的名称
接下来,我们将它放入您的activity_main.xml

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_graph" />

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_host"
app:startDestination="@id/oneFragment">

<fragment
    android:id="@+id/oneFragment"
    android:name="com.uogames.androidjun.OneFragment"
    android:label="OneFragment"
    tools:layout="@layout/fragment_one" >
</fragment>

<fragment
    android:id="@+id/twoFragment"
    android:name="com.uogames.androidjun.TwoFragment"
    android:label="TwoFragment"
    tools:layout="@layout/fragment_two" />
</navigation>

然后,当您启动应用程序时,您将以OneFragment开始如果您调用findNavController().navigate(R.id.to_twoFragment),您将看到第二个片段您可以在here中阅读它
您还需要依赖项

implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'

如果您想关闭应用程序,只需调用它requireActivity().finishAndRemoveTask()

相关问题