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

回收器查看(静止)未显示片段上的项目

邹桐
2023-03-14

我知道有很多关于我的类似问题的帖子,我甚至关注了这个和这个以及其他帖子(虽然我不会在这里列出每一个帖子)并尝试了不同的东西,但我仍然无法让我的< code > recycle view 在我的< code>Fragment上显示任何东西。

我写一个应用程序主要是为了学习——类似于这样的东西,只是为了了解事物是如何协同工作的。如果你想看这个项目(至少我到目前为止做了什么),你可以在这里做。

我只想在回收视图上显示项目。目前,回收站视图中的任何内容都不显示在白色背景的片段中,只有:(。

我甚至没有收到任何类似于“未连接适配器;跳过布局”或“未连接布局管理器;正在跳过布局”的错误。我相信这可能是一个很小的问题,所以请你解释一下我遗漏了什么或做错了什么。

非常感谢你的努力。

我是这么做的:

适配器代码:

class ActivitiesAdapter internal constructor(
    context: Context
) : RecyclerView.Adapter<ActivitiesAdapter.ActivitiesViewHolder>() {
    private val inflater: LayoutInflater = LayoutInflater.from(context)
    private var activities = emptyList<DoItAgainEntity>()

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ActivitiesViewHolder {
        val itemView = inflater.inflate(R.layout.recyclerview_item, parent, false)
        return ActivitiesViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: ActivitiesViewHolder, position: Int) {
        val current = activities[position]
        holder.activityItemView.text = current.engagement
    }

    internal fun setActivities(activities: List<DoItAgainEntity>) {
        this.activities = activities
        notifyDataSetChanged()
    }

    override fun getItemCount() = activities.size

    inner class ActivitiesViewHolder(itemview: View) : RecyclerView.ViewHolder(itemview) {
        val activityItemView: TextView = itemview.findViewById(R.id.textView)
    }
}

片段代码:

class ShowDBEntriesFragment : Fragment() {

    private lateinit var viewModel: ShowDBEntriesViewModel
    private lateinit var layout: View
    private lateinit var recyclerView: RecyclerView
    private lateinit var adapter: ActivitiesAdapter

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        layout = inflater.inflate(R.layout.show_dbentries_fragment, container, false)
        adapter = ActivitiesAdapter(context!!)
        recyclerView = layout.findViewById(R.id.recyclerview)
        recyclerView.addItemDecoration(
            DividerItemDecoration(
                context!!,
                LinearLayoutManager.VERTICAL
            )
        )
        recyclerView.layoutManager =
            LinearLayoutManager(context!!, LinearLayoutManager.VERTICAL, false)
        recyclerView.adapter = adapter
        return layout
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        viewModel = ViewModelProviders.of(this).get(ShowDBEntriesViewModel::class.java)

        fab.setOnClickListener {
            val fragmentManager = (activity as MainActivity).supportFragmentManager
            val fragmentTransaction = fragmentManager.beginTransaction()
            val fragment = InsertNewEngagementFragment()
            fragmentTransaction.replace(R.id.fragment_newEngagement, fragment)
            fragmentTransaction.commit()
        }
    }

}

< code > recycle view _ item . XML 中的< code>xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        style="@style/activity_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_orange_light" />

</LinearLayout>

共有3个答案

干宏邈
2023-03-14

这是这个问题的答案。我不拥有这段代码。这段代码是由一个心胸宽广的天才(也是我的一个朋友)写的,他理解事物是如何工作的,并且编写了漂亮的代码。我很荣幸能向你学习,兄弟——非常感谢你的极度善良和上帝般的Android知识!继续这样下去。

这就是正确的做事方式:

适配器代码:

class ActivitiesAdapter : RecyclerView.Adapter<ActivitiesViewHolder>() {

    private var activities = emptyList<DoItAgainEntity>()

    internal fun setActivities(activities: List<DoItAgainEntity>) {
        this.activities = activities
        notifyDataSetChanged()
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ActivitiesViewHolder =
        ActivitiesViewHolder(
            LayoutInflater.from(parent.context).inflate(
                R.layout.recyclerview_item,
                parent,
                false
            )
        )

    override fun onBindViewHolder(holder: ActivitiesViewHolder, position: Int) {
        holder.bind(activities[position])
    }

    override fun getItemCount() = activities.size
}

class ActivitiesViewHolder(
    override val containerView: View
) : RecyclerView.ViewHolder(containerView), LayoutContainer {

    fun bind(vo: DoItAgainEntity) {
        itemView.textView.text = vo.engagement
    }
}

片段代码:

class ShowDBEntriesFragment : Fragment() {

    private lateinit var viewModel: ShowDBEntriesViewModel
    private lateinit var activitiesAdapter: ActivitiesAdapter

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

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        viewModel = ViewModelProviders.of(this).get(ShowDBEntriesViewModel::class.java)

        activitiesAdapter = ActivitiesAdapter()
        recyclerview.apply {
            addItemDecoration(
                DividerItemDecoration(
                    context!!,
                    LinearLayoutManager.VERTICAL
                )
            )
            layoutManager = LinearLayoutManager(context!!, LinearLayoutManager.VERTICAL, false)
            adapter = activitiesAdapter
        }

        // for testing purposes. could be deleted easily
        activitiesAdapter.setActivities(
            listOf(
                DoItAgainEntity(1, "play guitar", 100),
                DoItAgainEntity(2, "make breakfast", 2),
                DoItAgainEntity(2, "go out with friends", 20)
            )
        )

        fab.setOnClickListener {
            val fragmentManager = (activity as MainActivity).supportFragmentManager
            val fragmentTransaction = fragmentManager.beginTransaction()
            val fragment = InsertNewEngagementFragment()
            fragmentTransaction.replace(R.id.fragment_newEngagement, fragment)
            fragmentTransaction.commit()
        }
    }

}

recyclerview_item.xml中的xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        style="@style/activity_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_orange_light" />

</LinearLayout>
诸彬郁
2023-03-14

在< code > recycle view _ item . XML 中

将android:layout_height=“match_parent”更改为

项目布局可能会占用整个布局空间。

赏新知
2023-03-14

您没有调用setActivities()

您的代码将如下所示:

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        layout = inflater.inflate(R.layout.show_dbentries_fragment, container, false)
        adapter = ActivitiesAdapter(context!!)
        recyclerView = layout.findViewById(R.id.recyclerview)
        recyclerView.addItemDecoration(
            DividerItemDecoration(
                context!!,
                LinearLayoutManager.VERTICAL
            )
        )
        recyclerView.layoutManager =
            LinearLayoutManager(context!!, LinearLayoutManager.VERTICAL, false)
        recyclerView.adapter = adapter
        // Create activities variable
        adapter.setActivities(activities)
        return layout
    }
 类似资料:
  • FolderListAdapter代码 RecyclerView的Mainactive代码 回收器视图的XML代码 folderList的大小为2 我还检查了适配器的大小。它也是2,我不知道我在哪里犯了错误,为什么它现在在活动中什么都没有显示

  • 我正在尝试实现项的刷取。实施大多以此为基础。 背景: 当用户滑动视图时,视图被移动到正确的位置,但它不会消失。-好 然后:当用户点击(不是滑动)滑动的项目时,转义动画被触发(默认一个)。-好 为了更好地演示行为,我创建了一个GIF。 演示某人是否感兴趣的示例项目。

  • 我有一个嵌套片段的项目(https://github.com/checklist/NestedFragmentsRecycler)。FragmentA位于MainActivity中,包含带有适配器的RecyclerView。适配器中的每个项目都将返回FragmentB。因为我需要给一个id来装载FragmentB到位置,并且它需要是唯一的,所以我正在生成我自己的id。第一个片段显示得很好,但不幸的

  • 我有“E/RecyclerView:没有连接适配器;跳过布局”错误消息。我在片段中有recycleView,所以我一定是在fragment1.java上做错了什么。 这是代码。如您所见,我在代码上设置了适配器,但我收到此错误。任何帮助将不胜感激。谢谢。 公共类Fragment1扩展片段{ } 公共类圣经适配器扩展回收器View.Adapter { }

  • 如果用户点击一个,我希望它做一些事情,也为两个和三个。我如何实现这一点?

  • 当我按下后退按钮时,这个ShoppingActivity会被破坏,当我再次访问该activity时,我发现我的回收器视图项目被替换了两次。我该如何解决这个问题? ShoppingActivity.java这里编写的所有代码和volley类也在这里调用,当我按下后退键并再次访问该活动时,我发现我的回收器视图项被替换了 @override protected void onCreate(Bundle