首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Airbnb Epoxy中未显示简单TextView

Airbnb Epoxy中未显示简单TextView
EN

Stack Overflow用户
提问于 2020-12-18 23:04:05
回答 2查看 490关注 0票数 1

我试图在回收视图中使用epoxy显示一个简单的文本视图,但它没有出现。我能做错什么呢。

我想会是这样的。

但我得到的却是这个

代码语言:javascript
复制
//build.gradle
    implementation "com.airbnb.android:epoxy:4.3.1"
    kapt "com.airbnb.android:epoxy-processor:4.3.1"

MainActivity.kt

代码语言:javascript
复制
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val rv= findViewById<RecyclerView>(R.id.main_recyclerview)
        rv.adapter= MyController().adapter
    }
}

activity_main.xml

代码语言:javascript
复制
<?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">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/main_recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

MyController.kt

代码语言:javascript
复制
class MyController : Typed2EpoxyController<List<String>,Boolean>() {
    override fun buildModels(data1: List<String>, data2: Boolean) {
        MyTextViewModel_().id(1).titleText("first title")
        MyTextViewModel_().id(2).titleText("second title")
        MyTextViewModel_().id(3).titleText("third title")
    }
}

MyTextViewModel.kt

代码语言:javascript
复制
@EpoxyModelClass(layout = R.layout.textview_row)
abstract class MyTextViewModel(): EpoxyModelWithHolder<VH>() {
    @EpoxyAttribute
    var titleText: String = "Default Title Text"

    override fun bind(holder: VH) {
        super.bind(holder)
        holder.titleTextView.text= titleText
    }
    class VH : EpoxyHolder() {
        lateinit var titleTextView: TextView
        override fun bindView(itemView: View) {
            titleTextView= itemView.findViewById(R.id.title)
        }
    }
}

textview_row.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <TextView
        android:id="@+id/title_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:text="SIMPLE TITLE"
        app:layout_constraintBaseline_toBaselineOf="@+id/more_textview"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/more_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:text="More"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-21 03:18:08

我发现了多个问题,解决方案在这里:

1-按照伊利亚·加兹曼的建议首先修复textview_row高度

代码语言:javascript
复制
    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <TextView
        android:id="@+id/title_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:text="SIMPLE TITLE"
        app:layout_constraintBaseline_toBaselineOf="@+id/more_textview"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/more_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:text="More"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

2- RecyclerView类类型有问题,您应该使用com.airbnb.epoxy.EpoxyRecyclerView

代码语言:javascript
复制
<?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">

    <com.airbnb.epoxy.EpoxyRecyclerView
        android:id="@+id/main_recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

3-控制器初始化

代码语言:javascript
复制
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val rv = findViewById<EpoxyRecyclerView>(R.id.main_recyclerview)
        val controller  = MyController()
        controller.setData(listOf("test","test2", "test3"),true)
        rv.adapter = controller.adapter
    }
}

4-控制器addTo丢失

代码语言:javascript
复制
class MyController : Typed2EpoxyController<List<String>,Boolean>() {
    override fun buildModels(data1: List<String>, data2: Boolean) {
       data1.forEachIndexed { index, s ->
           MyTextViewModel_().id(index).titleText(s).addTo(this)
       }
    }
}

5-错误的findViewById引用。在您的示例中,您使用的是title。

代码语言:javascript
复制
@EpoxyModelClass(layout = R.layout.textview_row)
abstract class MyTextViewModel(): EpoxyModelWithHolder<MyTextViewModel.VH>() {
    @EpoxyAttribute
    var titleText: String = "Default Title Text"

    override fun bind(holder: VH) {
        super.bind(holder)
        holder.titleTextView.text= titleText
    }

    class VH : EpoxyHolder() {
        lateinit var titleTextView: TextView
        override fun bindView(itemView: View) {
            titleTextView = itemView.findViewById(R.id.title_textview)
        }
    }
} 

结果:

票数 4
EN

Stack Overflow用户

发布于 2020-12-21 00:46:50

尝试将textview_row ConstraintLayout更改为固定大小的高度或wrap_content,而不是match_parent,因为您不希望每个项目占用整个屏幕空间。

它可以潜在地解释你现在正在经历的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65359309

复制
相关文章

相似问题

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