如何使用 Android Studio 中的 Kotlin 通过单击另一个片段中的图像来导航到片段?

问题描述 投票:0回答:1

我有 2 个片段 - Home Fragment 和 Frag 2。我在 Home Fragment (id: imageView3) 中有一个图像,当我点击图像时,我应该被带到 Frag 2。我使用以下方法使图像可点击代码行:

android:id="@+id/imageView3"
android:layout_width="383dp"
android:layout_height="211dp"
android:clickable="true"
android:focusable="true"

我在下面添加了 Home Fragment 和 Frag 2 的代码,我尝试在 home fragment 中设置 On Click,但我不确定如何将相应的代码添加到 Frag 2。我已经添加了从 Home Fragent 到 Frag 2 的导航,但我认为我还应该向 MainActivity 添加一些代码? 我遇到的所有在线参考资料都非常混乱,我是初学者,正在尝试自学,所以请帮助我了解 Home Fragment、Frag 2 和 MainActivity 中的代码。非常感谢您的帮助!

HomeFragment.kt

package com.example.landingpages.ui.home

import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import com.example.landingpages.Frag2
import com.example.landingpages.R
import com.example.landingpages.databinding.FragmentHomeBinding

class HomeFragment : Fragment() {

    private var _binding: FragmentHomeBinding? = null

    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        val homeViewModel =
            ViewModelProvider(this).get(HomeViewModel::class.java)

        _binding = FragmentHomeBinding.inflate(inflater, container, false)
        val root: View = binding.root

        val imageView5 = findNavController(R.id.imageView5) as ImageView
        imageView5.setOnClickListener {
            val intent = Intent(this, Frag2::class.java)
            startActivity(intent)

        }
        val textView: TextView = binding.textView
        homeViewModel.text.observe(viewLifecycleOwner) {

        }
        return root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

Frag2.kt

package com.example.landingpages

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.example.landingpages.databinding.FragmentIplAuctionBinding

private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"

class Frag2 : Fragment() {
        private var param1: String? = null
    private var param2: String? = null
    private lateinit var binding: FragmentIplAuctionBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = FragmentIplAuctionBinding.inflate(layoutInflater)


        arguments?.let {
            param1 = it.getString(ARG_PARAM1)
            param2 = it.getString(ARG_PARAM2)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_ipl_auction, container, false)
    }


    }
}

MainActivity.kt

package com.example.landingpages

import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.example.landingpages.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

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

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val navView: BottomNavigationView = binding.navView

        val navController = findNavController(R.id.nav_host_fragment_activity_main)
                val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.navigation_home, R.id.navigation_matches, R.id.navigation_profile
            )
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)
    }
}

我已将 setOnClickListener 添加到主页片段。我想我必须将 return() 添加到 Frag 2,但我不确定。我也不确定要将 Frag 2 广告到主活动,因为我使用的其他片段喜欢导航栏。 问题很简单:如果用户点击 imageview3,他们应该被带到 Frag 2

android kotlin android-fragments
1个回答
0
投票

来自文档的简单答案是在您的onClick期间导航到视图:

val action = Frag1Directions.actionFrag1ToFrag2
imageView5.setOnClickListener { 
  imageview5.findNavController().navigate(action)
}

我建议参加本课程以充分了解片段导航。

© www.soinside.com 2019 - 2024. All rights reserved.