当前位置: 首页 > 知识库问答 >
问题:

如何在片段定义上访问textview的id?

韶浩皛
2023-03-14

我正试图通过id访问包装的相对布局上的TextView元素,但它没有显示在引用的id中,因此如何使用findViewById方法获取元素的id视图?我添加了一个扩展,允许我直接引用元素,但这并不完全是我要寻找的。我使用一个导航视图在片段之间切换,主活动有一个片段,在菜单中显示所选项目,因此我如何可能访问片段内视图布局中自己的元素释义片段定义活动主

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    tools:context=".MainActivity">


   <androidx.constraintlayout.widget.ConstraintLayout
       android:id="@+id/mainLayout">
    <include layout="@layout/action_bar"></include>
       <fragment
           android:layout_width="match_parent"
           android:layout_height="0dp"
           android:id="@+id/navHostFragment"
           android:name="androidx.navigation.fragment.NavHostFragment"
           app:defaultNavHost="true"
           app:navGraph="@navigation/main_navigation">
       </fragment>
   </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.drawerlayout.widget.DrawerLayout>

R. id中的画廊号不显示

package com.example.applicationtest

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.gallery_fragment.view.*
import android.R
import kotlinx.android.synthetic.main.gallery_fragment.*

class gallery_fragment : Fragment() {
    private var param1: String? = null
    private var param2: String? = null
    lateinit  var recyclerView: RecyclerView
    lateinit var galleryAdapter:GalleryAdapter;
    lateinit var imageList:MutableList<String>
    lateinit var galleryNumberText:TextView
    fun GetGalleryFragment(inflater: LayoutInflater) :ViewGroup = inflater.inflate(this.id, null) as ViewGroup

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

        var _galleryFragment = GetGalleryFragment(inflater)
        val but = _galleryFragment.findViewById<View>(R.id.galleryNumber) as TextView


        galleryNumberText = galleryNumber //this works only because the extension has been added but it is not really what I want
        // Inflate the layout for this fragment
        return inflater.inflate(this.id, container, false)
    }

片段视图

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".gallery_fragment"
    android:id="@+id/gallery_fragment"
    android:background="#333333"
    android:orientation="vertical">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="56dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/galleryNumber"
            android:layout_centerVertical="true"
            android:layout_marginLeft="16dp"
            android:textColor="@color/white"
            android:textStyle="bold"
            android:textSize="18dp"
            />
    </RelativeLayout>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerViewImageItems"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </androidx.recyclerview.widget.RecyclerView>

</RelativeLayout>```

共有1个答案

汪理
2023-03-14

删除GetGalleryFragment函数,因为它完全错误。将版面的额外副本膨胀是没有意义的。

此外,类名应始终以大写字母开头,以符合约定,因此您可以区分构造函数调用和常规函数调用之间的差异,以及类型引用和变量名之间的差异。(与此相反,出于同样的原因,函数名不应以Kotlin中的大写字母开头。)

不再需要重写onCreateView(),因为现在有一个片段构造函数可以通过传递布局名称来为您执行此操作。这就简单多了。您应该重写onViewCreated(),您可以通过搜索提供的rootview在该函数中找到您的视图。

此外,我不建议将varMutable-任何东西组合在一起。对于一个开始为空的列表,您不应该使用lateinit。如果可能的话,在声明站点初始化变量会更干净。也许应该将此列表移动到ViewModel,但我将其保留在下面。

class GalleryFragment: Fragment(R.layout.your_fragment_layout_file_name) {

    private var param1: String? = null
    private var param2: String? = null
    lateinit var recyclerView: RecyclerView
    lateinit var galleryAdapter: GalleryAdapter;
    var imageList = emptyList<String>()
    lateinit var galleryNumberText: TextView

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        recyclerView = view.findViewById(R.id.recyclerViewImageItems)
        galleryNumberText = view.findViewById(R.id.galleryNumber)

        // ...
    }
}

您可能希望切换到视图绑定,这样就不必为每个视图查找和创建属性。

 类似资料:
  • 问题内容: 我有以下Java代码- 我得到的错误是 如何正确访问注释字段? 问题答案: 默认情况下,注释在运行时不可用。您需要添加到注释定义以使其可用于运行时处理。例如: 在实践中,还应在实际尝试从字段中删除注释之前,检查该字段是否确实具有给定的注释。 另外,指定注释所属的元素类型也是一种好习惯。因此,您的示例将是:

  • 问题内容: 类: 类: XML布局: 我试图访问内部的这样的: 我不断收到。我查看了所有文章以了解如何访问,但是没有一篇文章对我有帮助。 有人可以让我知道我在做什么错以及如何解决吗? 我还计划在我的内部添加其他我将来需要访问的。 问题答案: 由于尚未在以下代码段中初始化: 合理抛出。

  • 问题内容: 我试图以与定义视图布局相同的方式在XML中定义片段的布局。 这可能吗?我尝试了几种方法,但似乎都没有用。 我的活动布局如下所示(main.xml): 现在,由于我不太喜欢通过原始Java代码生成布局,因此我尝试按以下方式定义片段(fragment_lommeregner.xml): 难道我做错了什么?如何通过XML定义片段的布局? 问题答案: 片段的工作原理与活动类似,因为您需要一个J

  • 我最近研究了一个使用Liferay 6.1的Android应用程序。但是,我无法使用Liferay API更新自定义字段的值。 我将自定义字段挂接到users_adminportlet用户/details.jsp,并使公共视图可访问: 还挂接到登录portletcreate_account.jsp: 因此,我需要一个定制的Web服务来通过http客户端访问这些值,以发布/获取值。知道从哪里开始找吗

  • 问题内容: 使用“模板修饰而不是包含”技术时,如何检查Thymeleaf片段是否已定义? 在以下 template.html 示例中,我只希望在定义片段时呈现script标签 但是在我的使用上面模板的 index.html 中,没有定义脚本片段,但是script标签仍然会渲染 我尝试过但没有运气 问题答案: 我在Thymeleaf玩了一点(…),这是我的结论。 在下文中,我将使用任何给定的标签(,

  • 我的代码有问题,我试图在我的片段上创建一个新的listview。我用的是自定义抽屉。 这是我的完整代码。 这是我的碎片布局计划 这就是catlog错误