单击ImageButton到活动时如何从片段发送?

发布于 2025-01-25 11:30:42 字数 6332 浏览 2 评论 0原文

在片段中,当您单击imageButton时,活动将打开。我已经阅读了两天的所有可能资源,并且尝试了不同的方法,但它们都没有用。我在Kotlin写作。请提前)

PS一个学生,没有太多时间来提交工作,因此我没有以复杂的方式进行研究(在捍卫项目后,我将稍后再学习所有内容)。

fragment(fragment_add.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=".ui.add.AddFragment">

<ImageButton
    android:id="@+id/storageBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="24dp"
    android:background="#00FFFFFF"
    android:src="@drawable/im_storage"
    android:onClick="startActivity"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<ImageButton
    android:id="@+id/transportationBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:background="#00FFFFFF"
    android:src="@drawable/im_transportation"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/storageBtn" />
</androidx.constraintlayout.widget.ConstraintLayout>

fragment(addfragment.kt):

package com.project_demo.kurzov.ui.add

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.project_demo.kurzov.R
import com.project_demo.kurzov.StorageActivity

class AddFragment : Fragment() {

    companion object {
        fun newInstance() = AddFragment()

    }

    private lateinit var viewModel: AddViewModel

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        View view =  inflater.inflate(R.layout.fragment_add, container, false)
        imageButton = (ImageButton)view.findViewById(R.id.storageBtn)
        imageButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                startActivity(getActivity(),StorageActivity.class)
            }
        })
        return view}
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        viewModel = ViewModelProvider(this).get(AddViewModel::class.java)
        // TODO: Use the ViewModel
    }
}

在这里我尝试按照以下示例。有必要将按钮按下时,将其发送到(储存性)。

托管和管理片段的主要活动(bottomNavigationActivity.kt):

package com.project_demo.kurzov

import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.Button
import android.widget.ImageButton
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.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import com.project_demo.kurzov.databinding.ActivityBottomNavigationBinding

class BottomNavigationActivity : AppCompatActivity() {
    lateinit var binding: ActivityBottomNavigationBinding
    lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityBottomNavigationBinding.inflate(layoutInflater)
        setContentView(binding.root)
        auth = Firebase.auth
        auth.currentUser

        val navView: BottomNavigationView = binding.navView

        val navController = findNavController(R.id.nav_host_fragment_activity_bottom_navigation)
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.navigation_home,
                R.id.navigation_folder,
                R.id.navigation_add_documents,
                R.id.navigation_calendar,
                R.id.navigation_menu
            )
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)

    }

}

活动(activity_bottom_navigation.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"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/bot_navigation"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu" />

    <fragment
        android:id="@+id/nav_host_fragment_activity_bottom_navigation"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/nav_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/mobile_navigation" />

</androidx.constraintlayout.widget.ConstraintLayout>

我将成为我将成为非常感激的帮助。

It is necessary that in the Fragment, when you click on the ImageButton, the Activity opens.I've been reading all possible resources for two days and tried different methods, but none of them work. I am writing in Kotlin. Thanks in advance)

P.S. A student, there is not much time left to submit the work, so I did not approach the study of the material in a complex way (after defending the project, I will learn everything normally later).

Fragment (fragment_add.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=".ui.add.AddFragment">

<ImageButton
    android:id="@+id/storageBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="24dp"
    android:background="#00FFFFFF"
    android:src="@drawable/im_storage"
    android:onClick="startActivity"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<ImageButton
    android:id="@+id/transportationBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:background="#00FFFFFF"
    android:src="@drawable/im_transportation"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/storageBtn" />
</androidx.constraintlayout.widget.ConstraintLayout>

Fragment (AddFragment.kt):

package com.project_demo.kurzov.ui.add

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.project_demo.kurzov.R
import com.project_demo.kurzov.StorageActivity

class AddFragment : Fragment() {

    companion object {
        fun newInstance() = AddFragment()

    }

    private lateinit var viewModel: AddViewModel

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        View view =  inflater.inflate(R.layout.fragment_add, container, false)
        imageButton = (ImageButton)view.findViewById(R.id.storageBtn)
        imageButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                startActivity(getActivity(),StorageActivity.class)
            }
        })
        return view}
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        viewModel = ViewModelProvider(this).get(AddViewModel::class.java)
        // TODO: Use the ViewModel
    }
}

Here I tried to follow the example. It is necessary that when the button is pressed, it is sent to the (StorageActivity).

The main Activity that hosts and manages Fragments (BottomNavigationActivity.kt):

package com.project_demo.kurzov

import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.Button
import android.widget.ImageButton
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.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import com.project_demo.kurzov.databinding.ActivityBottomNavigationBinding

class BottomNavigationActivity : AppCompatActivity() {
    lateinit var binding: ActivityBottomNavigationBinding
    lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityBottomNavigationBinding.inflate(layoutInflater)
        setContentView(binding.root)
        auth = Firebase.auth
        auth.currentUser

        val navView: BottomNavigationView = binding.navView

        val navController = findNavController(R.id.nav_host_fragment_activity_bottom_navigation)
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.navigation_home,
                R.id.navigation_folder,
                R.id.navigation_add_documents,
                R.id.navigation_calendar,
                R.id.navigation_menu
            )
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)

    }

}

Activity (activity_bottom_navigation.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"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/bot_navigation"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu" />

    <fragment
        android:id="@+id/nav_host_fragment_activity_bottom_navigation"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/nav_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/mobile_navigation" />

</androidx.constraintlayout.widget.ConstraintLayout>

I will be very grateful help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ゞ花落谁相伴 2025-02-01 11:30:42

您需要创建一个意图对象的实例,然后将其传递到startActivity函数:

imageButton.setOnClickListener {
    startActivity(Intent(requireContext(), StorageActivity::class.java))
}

You need to create an instance of Intent object and pass it to startActivity function:

imageButton.setOnClickListener {
    startActivity(Intent(requireContext(), StorageActivity::class.java))
}
赤濁 2025-02-01 11:30:42

我们之所以使用seecteContext是因为我们在片段中使用它,如果我们也要使用活动,我们将使用“此”。

addfragment.kt(活动的片段)

storageBtn.setOnClickListener {          
        startActivity(requireContext(),StorageActivity::class.java)
 }

活动到活动

storageBtn.setOnClickListener{
        startActivity(this,StorageActivity::class.java)
    }

The reason we use requireContext is because we use it in fragment, we would use "this" if we were going to use activity as well.

AddFragment.kt(fragment to Activity)

storageBtn.setOnClickListener {          
        startActivity(requireContext(),StorageActivity::class.java)
 }

activity to activity

storageBtn.setOnClickListener{
        startActivity(this,StorageActivity::class.java)
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文