首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用FindViewById时片段中的错误

使用FindViewById时片段中的错误
EN

Stack Overflow用户
提问于 2022-09-06 10:07:30
回答 2查看 35关注 0票数 0

我试图使用片段来避免过多的活动给我的应用程序带来负担。在我的mainActivity中有一个映射,然后我在有editText字段的地方创建了一个片段,我想使用这些editText插入数字作为参数传递给另一个名为navFun的类中创建的函数。我试图编写代码,但我不明白为什么在使用findViewById时会出现这些错误:

代码语言:javascript
运行
复制
Unresolved reference: findViewById

这是我的片段代码

代码语言:javascript
运行
复制
package uk.co.lorenzopulcinelli.navigationdrawer

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.EditText
import android.widget.Toast
import java.lang.Exception

// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"

/**
 * A simple [Fragment] subclass.
 * Use the [CreatePathFragment.newInstance] factory method to
 * create an instance of this fragment.
 */
class CreatePathFragment : Fragment() {
    // TODO: Rename and change types of parameters
    private var param1: String? = null
    private var param2: String? = null


    val mainActivity: MainActivity = MainActivity()
    val navFun: NavFun = NavFun(mainActivity.context, mainActivity.mapView)

    private lateinit var editTextLatitudineP1: EditText
    private lateinit var editTextLongitudineP1: EditText
    private lateinit var editTextLatitudineP2: EditText
    private lateinit var editTextLongitudineP2: EditText


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
            param1 = it.getString(ARG_PARAM1)
            param2 = it.getString(ARG_PARAM2)
        }
    }

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



        // create path between editText points

        editTextLatitudineP1 = findViewById<EditText>(R.id.editTextLatitudineP1)
        editTextLongitudineP1 = findViewById<EditText>(R.id.editTextLongitudineP1)
        editTextLatitudineP2 = findViewById<EditText>(R.id.editTextLatitudineP2)
        editTextLongitudineP2 = findViewById<EditText>(R.id.editTextLongitudineP2)

        val b = findViewById<Button>(R.id.location)
        b.setOnClickListener{
            try {
               Log.d("Path", "Clicked")
               val p1lati: Double = editTextLatitudineP1.text.toString().toDouble()
               val p1long: Double = editTextLongitudineP1.text.toString().toDouble()
               val p2lati: Double = editTextLatitudineP2.text.toString().toDouble()
               val p2long: Double = editTextLongitudineP2.text.toString().toDouble()
               println("latitudine: $p2lati, longitudine: $p2long")
               navFun.routePath(p1lati, p1long, p2lati, p2long)
               mainActivity.mapView.invalidate()
            } catch (e: Exception) {
                Toast.makeText(context, "Error when entering coordinates", Toast.LENGTH_SHORT).show()
            }
        }

        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_create_path, container, false)
    }

    companion object {
        /**
         * Use this factory method to create a new instance of
         * this fragment using the provided parameters.
         *
         * @param param1 Parameter 1.
         * @param param2 Parameter 2.
         * @return A new instance of fragment CreatePathFragment.
         */
        // TODO: Rename and change types and number of parameters
        @JvmStatic
        fun newInstance(param1: String, param2: String) =
            CreatePathFragment().apply {
                arguments = Bundle().apply {
                    putString(ARG_PARAM1, param1)
                    putString(ARG_PARAM2, param2)
                }
            }
    }
}

这是我的片段xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    tools:context=".CreatePathFragment"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/crea_percorso"
        android:textColor="@color/black"
        android:textSize="40sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/inserisci_le_coordinate_dei_punti_tra_cui_vuoi_creare_un_percorso" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/latitudine_punto_di_partenza" />

    <EditText
        android:id="@+id/editTextLatitudineP1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:ems="10"
        android:hint="@string/latitudine_p1"
        android:inputType="numberSigned|numberDecimal" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/longitudine_punto_di_partenza" />

    <EditText
        android:id="@+id/editTextLongitudineP1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:ems="10"
        android:hint="@string/longitudine_p1"
        android:inputType="numberSigned|numberDecimal" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/latitudine_punto_di_arrivo" />

    <EditText
        android:id="@+id/editTextLatitudineP2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:ems="10"
        android:hint="@string/latitudine_p2"
        android:inputType="numberSigned|numberDecimal" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/longitudine_punto_di_arrivo" />

    <EditText
        android:id="@+id/editTextLongitudineP2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:ems="10"
        android:hint="@string/longitudine_p2"
        android:inputType="numberSigned|numberDecimal" />

    <Button
        android:id="@+id/location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/crea_percorso"
        />

</LinearLayout>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-06 10:16:29

代码语言:javascript
运行
复制
    override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {

    val view = inflater.inflate(R.layout.fragment_create_path, container, false)

    // create path between editText points

    editTextLatitudineP1 = view.findViewById<EditText>(R.id.editTextLatitudineP1)
    editTextLongitudineP1 = view.findViewById<EditText>(R.id.editTextLongitudineP1)
    editTextLatitudineP2 = view.findViewById<EditText>(R.id.editTextLatitudineP2)
    editTextLongitudineP2 = view.findViewById<EditText>(R.id.editTextLongitudineP2)

    val b = findViewById<Button>(R.id.location)
    b.setOnClickListener{
        try {
           Log.d("Path", "Clicked")
           val p1lati: Double = editTextLatitudineP1.text.toString().toDouble()
           val p1long: Double = editTextLongitudineP1.text.toString().toDouble()
           val p2lati: Double = editTextLatitudineP2.text.toString().toDouble()
           val p2long: Double = editTextLongitudineP2.text.toString().toDouble()
           println("latitudine: $p2lati, longitudine: $p2long")
           navFun.routePath(p1lati, p1long, p2lati, p2long)
           mainActivity.mapView.invalidate()
        } catch (e: Exception) {
            Toast.makeText(context, "Error when entering coordinates", Toast.LENGTH_SHORT).show()
        }
    }

    // Inflate the layout for this fragment
    return view
}

您必须先创建视图,而不是在该视图上调用findViewById。

票数 1
EN

Stack Overflow用户

发布于 2022-09-06 10:20:48

findViewById将无法在onCreateView中工作,因为当时正在创建UI,因此尚未初始化视图。

尝试将视图链接到onViewCreated内部。<--您可以使用ctrl+O导入它

代码语言:javascript
运行
复制
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
     
       editTextLatitudineP1 = findViewById<EditText>(R.id.editTextLatitudineP1)

       //.....the rest of your code
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73620219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档