更改另一个片段的片段(列表)

时间:2019-04-16 18:54:04

标签: android listview kotlin android-recyclerview fragment

两个片段一起作为菜单使用;最上面的片段应包含一个ImageView,该图像通过最下面的片段内的列表进行更改。我该怎么做呢?我需要使用RecyclerView吗?

我不确定从哪里开始,是否必须为每个列表项制作一个通用的片段或创建一个片段。如果我可以使用通用选项;我将如何去做这样的事情?任何帮助将不胜感激,我真的迷路了。

How it is supposed to look like

3 个答案:

答案 0 :(得分:1)

我肯定会使用RecyclerView作为列表。

对于顶部,如果您只是替换图像,我建议仅在主要活动上使用ImageView。

然后在RecyclerView适配器中设置一个接口,该接口将所选对象传递到片段,然后返回活动。然后在该回调中,更新ImageView。

答案 1 :(得分:0)

使用观察者模式。

当您单击底部片段的RecyclerView中的某个项目时,请以所选的新值通知所有订户。然后,在活动上,将顶部片段设置为订户,最后,在顶部片段的回调中,在ImageView中进行更改。

是的,强烈建议您使用RecyclerView将这些物品作为列表处理。

PS ::仅当您要在其他活动中使用具有相同行为的RecyclerView或ImageView时,才需要使用片段,否则将它们直接保留在活动中完全没问题。

答案 2 :(得分:0)

推理

您可以选择其中之一。

因此,基本上,您可以编写任何布局文件,并且可以使用@numba.jitFragment或仅使用Activity对其进行膨胀从这个角度来看(布局文件)很重要。

片段是一个不错的选择,因为:

  • 它们允许轻松重用包含RecyclerView.ViewHolder的所有代码
  • 它们是可实例化的,与Fragment不同;这基本上意味着您无需执行Activity模式的实现即可在它们之间传递复杂的对象(片段<->片段||片段<->活动)

一个Parcelable就足够了:

实现一个片段真的很好,但是如果您不需要它,那么您正在编写的代码样例并没有真正的用途……所以不要那样做:P

示例代码

布局文件:

Activity

科特琳代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".StackOverflowSample">

    <ImageView
            android:id="@+id/your_image_view"
            android:src="@drawable/ic_launcher_foreground"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            app:layout_constraintTop_toTopOf="parent"/>

    <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintTop_toBottomOf="@+id/your_image_view"
            app:layout_constraintBottom_toBottomOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>