Android Fragments 如何在底部的表单片段中使按钮可点击?

1aaf6o9v  于 2023-02-08  发布在  Android
关注(0)|答案(1)|浏览(125)
    • 流程:**有两个xml文件:

活动_主文件. xml

底部表格_片段. xml

我想单击"单击此处"按钮(xml id:btn_show)并显示底部工作表片段[这是正确发生的)..相应文件:活动_主要. xml、主要活动. kt
现在我想单击底部表单中的按钮(xml id:btn_button1),并显示文本,你按下按钮1通过烤面包(或其他任何东西也很好,我只是想显示的东西,当我点击按钮)[这部分是不是发生正确)。底表片段. xml、底表片段. kt
我随附以下文件的代码:
bottomsheet_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn_button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:text="Sample button 1"
        />

</LinearLayout>

BottomSheetFragment.kt

package android.example.naruto

import android.example.naruto.databinding.ActivityMainBinding
import android.example.naruto.databinding.BottomsheetFragmentBinding
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import com.google.android.material.bottomsheet.BottomSheetDialogFragment

class BottomSheetFragment: BottomSheetDialogFragment() {

    private lateinit var binding2: BottomsheetFragmentBinding

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

        binding2 = BottomsheetFragmentBinding.inflate(layoutInflater)

        binding2.btnButton1.setOnClickListener{
            Toast.makeText(context, "You pressed on button 1!", Toast.LENGTH_SHORT).show()
        }
    }
}

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">

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

</androidx.constraintlayout.widget.ConstraintLayout>

主要_活动. kt

package android.example.naruto

import android.example.naruto.databinding.ActivityMainBinding
import android.example.naruto.databinding.BottomsheetFragmentBinding
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

    private lateinit var binding1: ActivityMainBinding

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

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

        val bottomSheetFragment= BottomSheetFragment()

        binding1.btnShow.setOnClickListener {
           bottomSheetFragment.show(supportFragmentManager, "BottomSheetDialog")
        }
    }
}

提前感谢您的帮助!如果您需要更多的细节或说明,请让我知道。
我参考了这些教程:https://www.youtube.com/watch?v=yqnVPiWAw0o&t=21shttps://www.youtube.com/watch?v=4GXflIdrlus

cmssoen2

cmssoen21#

我无法在BottomSheetFragment中看到onCreateView方法,可能这就是它不工作的原因
您可以像这样更改代码

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

        binding2 = BottomsheetFragmentBinding.inflate(layoutInflater)

        binding2.btnButton1.setOnClickListener{
            Toast.makeText(context, "You pressed on button 1!", Toast.LENGTH_SHORT).show()
        }
    }

override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding2 = BottomSheetFamilyTreeBinding.inflate(inflater, container, false)
        return binding2.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding2.btnButton1.setOnClickListener{
            Toast.makeText(context, "You pressed on button 1!", Toast.LENGTH_SHORT).show()
        }
        
    }

相关问题