該按鈕在我嘗試使用 synthitec 插件、資料系結甚至 findviewbyId() 的應用程式中根本不起作用,但它根本不起作用這是 Fragment 類->
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.Toast
import com.enternal.weapp.databinding.FragmentAddPostBinding
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.ktx.database
import com.google.firebase.ktx.Firebase
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.fragment_add_post.*
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.coroutines.NonDisposableHandle.parent
class AddPostFragment : Fragment() {
private lateinit var auth: FirebaseAuth
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val vieww:View = inflater.inflate(R.layout.fragment_add_post, container, false)
val buttonpost = view.findViewById<Button>(R.id.post_button)
val binding = FragmentAddPostBinding.inflate(layoutInflater)
buttonpost?.setOnClickListener{
Toast.makeText(activity, "Clicked!", Toast.LENGTH_SHORT).show()
val title = binding.editTitle.text.toString()
val description = binding.editDescription.text.toString()
addPost(title, description)
}
return vieww
}
private fun addPost(title: String, description: String) {
val post = Post(title, description)
val userId= auth.currentUser?.uid
val ref= Firebase.database.getReference("/posts/$userId")
ref.setValue(post)
}
}
class Post(val title:String, val description:String)
這是布局檔案->
<FrameLayout 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=".AddPostFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@ id/edit_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:ems="10"
android:inputType="textPersonName"
android:minHeight="48dp"
android:text="Title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@ id/edit_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="96dp"
android:ems="10"
android:inputType="textPersonName"
android:minHeight="48dp"
android:text="Description"
app:layout_constraintEnd_toEndOf="@ id/edit_title"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="@ id/edit_title"
app:layout_constraintTop_toBottomOf="@ id/edit_title" />
<Button
android:id="@ id/post_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="post"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@ id/edit_description"
app:layout_constraintStart_toStartOf="@ id/edit_description"
app:layout_constraintTop_toBottomOf="@ id/edit_description"
app:layout_constraintVertical_bias="0.211" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
我什至重做了整個應用程式,但它仍然無法正常作業 LOGCAT 中沒有錯誤,并且應用程式崩潰我嘗試了一切,請幫助!!!
uj5u.com熱心網友回復:
不是 kotlin 專家,但您不應該找到如下按鈕視圖...
val buttonpost = vieww.findViewById<Button>(R.id.post_button)
view?注意和之間的區別vieww。
uj5u.com熱心網友回復:
您正在呼叫片段findViewById()的可為空view屬性。還沒有view,因為您仍在onCreateView函式中創建視圖。你應該呼叫findViewById你膨脹的視圖,vieww.
但是,您應該這樣做onViewCreated()而不是onCreateView(),這是使用生命周期階段的預期方式。您可以在超級建構式呼叫中傳遞布局 ID 以使其更簡潔。
這里有兩種不同的解決方案:
// Without view binding:
class AddPostFragment : Fragment(R.layout.fragment_add_post) {
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?
) {
val buttonpost = view.findViewById<Button>(R.id.post_button)
buttonpost.setOnClickListener{
Toast.makeText(it.context, "Clicked!", Toast.LENGTH_SHORT).show()
val title = binding.editTitle.text.toString()
val description = binding.editDescription.text.toString()
addPost(title, description)
}
}
private fun addPost(title: String, description: String) {
// ...
}
}
// With view binding:
class AddPostFragment : Fragment(R.layout.fragment_add_post) {
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?
) {
val binding = FragmentAddPostBinding.bind(view)
binding.buttonpost.setOnClickListener{
Toast.makeText(it.context, "Clicked!", Toast.LENGTH_SHORT).show()
val title = binding.editTitle.text.toString()
val description = binding.editDescription.text.toString()
addPost(title, description)
}
}
private fun addPost(title: String, description: String) {
// ...
}
}
我的建議是,如果你希望一個函式總是被呼叫,比如,你不應該在它前面setOnClickListener放一個空安全呼叫。?.相反,重新考慮你的策略。如果您在可以為空的東西上呼叫它,但您希望它始終有效,那應該表明您采用了錯誤的方法。在這種情況下,這表明您在錯誤的屬性和/或生命周期的錯誤階段呼叫它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/494810.html
上一篇:在php中按節點值過濾xml
