मैं ओवरराइड onViewCreated फ़ंक्शन में एक टुकड़े का दृश्य पुनर्प्राप्त करने का प्रयास कर रहा हूं। नीचे onCreateView और onViewCreated विधियों के लिए मेरा कोड है:

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val root = inflater.inflate(R.layout.alarms, container, false)

    // UI initialization: Set options of the drop-down menu
    // Set the contents of the drop-down menu (Spinner)
    val spinnerArray =
        arrayOf("Followed Parties", "All Events", "Your Alarms", "Events You Haven't Set an Alarm For")

    val alarmOptions = root.findViewById<Spinner>(R.id.alarm_viewing_options)
    val adapter = ArrayAdapter(
        requireContext(),
        android.R.layout.simple_spinner_item,
        spinnerArray
    )
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    alarmOptions.adapter = adapter


    return root
}

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

    println("Alarm List: " + activity!!.findViewById(R.id.alarmList) as LinearLayout?)
}

कोड की दूसरी से अंतिम पंक्ति में, मैं किसी एक दृश्य (R.id.alarmList) को टुकड़े के लेआउट (R.layout.alarms) में पुनः प्राप्त करने का प्रयास करता हूं। हालांकि, जब मैं इसका मान प्रिंट करता हूं, तो यह शून्य है, यह दर्शाता है कि View नहीं मिला। यह अजीब लगता है, यह देखते हुए कि onViewCreated को onCreateView के बाद कहा जाता है (जिसमें मैं लेआउट को फुलाता हूं R.layout.alarms) और यह कि दृश्य R.id.alarmList स्पष्ट रूप से R.layout.alarms XML (alarms.xml) में मौजूद है:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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:id="@+id/constraintLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ui.main.EventsFragment">

    <Spinner
        android:id="@+id/alarm_viewing_options"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginTop="8dp"
        android:paddingLeft="7dp"
        android:paddingTop="7dp"
        android:paddingRight="7dp"
        android:paddingBottom="7dp"
        android:textSize="25sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout
        android:id="@+id/alarmList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    </LinearLayout>

    <include
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        layout="@layout/pagination_menu" />

</LinearLayout>
0
Adam Lee 13 जिंदा 2021, 09:02

2 जवाब

सबसे बढ़िया उत्तर

आप दृश्य के लिए गलत जगह देख रहे हैं, आप इसे लाइन के साथ Activity दायरे में खोजने का प्रयास कर रहे हैं

println("Alarm List: " + activity!!.findViewById(R.id.alarmList) as LinearLayout?)

उसमें बदलें

println("Alarm List: " + view!!.findViewById(R.id.alarmList) as LinearLayout?)

1
Andrew 13 जिंदा 2021, 09:09

ऐसा आमतौर पर इसलिए होता है क्योंकि आप activity में से findViewById का उपयोग करते हैं; इसलिए यह गतिविधि लेआउट को इंगित करता है न कि खंड लेआउट .. इसके बजाय आप onViewCreated() या requireView() के view पैरामीटर का उपयोग कर सकते हैं।

println("Alarm List: " + requireView().findViewById(R.id.alarmList) as LinearLayout?)
1
Zain 13 जिंदा 2021, 09:09