根据回收站视图中的选定项目更改编辑屏幕
Changing edit screen according to selected item in recycler view
我的流程如下
recyclerview --- click on item ---> detail screen --- click on edit
option menu item ---> edit screen
这里的字段显示在编辑屏幕中,根据用户点击的 recyclerview 项目而变化。
我在我的项目中使用数据绑定,所以有两种方法来处理这种情况。
- 在单个布局中膨胀编辑屏幕中的所有视图,并根据单击的项目将视图的可见性设置为
View.GONE
- 专业版:一种布局
- 缺点:Layout inflated so heap is allocated, (but views are not rendered). ~ 30 个未使用的膨胀视图。
- 为每个编辑屏幕使用单独的片段。
- 专业版:未为未使用的视图分配堆
- 缺点:多个片段,布局
性能和代码可维护性哪个更好?还有其他方法吗?
首先,更好的方法是使用单独的片段。这将有助于分离代码并以更少的行数轻松维护它。您还可以为常用方法创建BaseFragment
,使代码更简洁,片段更少。
另一方面,如果您使用 View Visible and Gone 方法而不是堆问题。您可以减少此问题以动态添加视图。
您可以拿一个空容器,然后根据您的情况添加视图。您必须为每个视图创建单独的布局文件。
添加空容器
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
动态添加视图
val view = inflater.inflate(
R.layout.file_name, null)
container.addView(view)
因此您无需根据条件隐藏或显示即可查看。您只需根据需要添加视图即可。
但是您必须在一个文件中为这两种布局编写代码。
对于数据绑定:
val view = inflater.inflate(
R.layout.row_article_home, null)
val binding = DataBindingUtil.bind<RowArticleHomeBinding>(view)!!
binding.arg = "xyz"
container.addView(view) or container.addView(binding.rootView)
行文章视图
<layout 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">
<data>
<variable
name="arg"
type="String" />
</data>
<androidx.cardview.widget.CardView/>
</layout>
我的流程如下
recyclerview --- click on item ---> detail screen --- click on edit option menu item ---> edit screen
这里的字段显示在编辑屏幕中,根据用户点击的 recyclerview 项目而变化。 我在我的项目中使用数据绑定,所以有两种方法来处理这种情况。
- 在单个布局中膨胀编辑屏幕中的所有视图,并根据单击的项目将视图的可见性设置为
View.GONE
- 专业版:一种布局
- 缺点:Layout inflated so heap is allocated, (but views are not rendered). ~ 30 个未使用的膨胀视图。
- 为每个编辑屏幕使用单独的片段。
- 专业版:未为未使用的视图分配堆
- 缺点:多个片段,布局
性能和代码可维护性哪个更好?还有其他方法吗?
首先,更好的方法是使用单独的片段。这将有助于分离代码并以更少的行数轻松维护它。您还可以为常用方法创建BaseFragment
,使代码更简洁,片段更少。
另一方面,如果您使用 View Visible and Gone 方法而不是堆问题。您可以减少此问题以动态添加视图。
您可以拿一个空容器,然后根据您的情况添加视图。您必须为每个视图创建单独的布局文件。
添加空容器
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
动态添加视图
val view = inflater.inflate(
R.layout.file_name, null)
container.addView(view)
因此您无需根据条件隐藏或显示即可查看。您只需根据需要添加视图即可。
但是您必须在一个文件中为这两种布局编写代码。
对于数据绑定:
val view = inflater.inflate(
R.layout.row_article_home, null)
val binding = DataBindingUtil.bind<RowArticleHomeBinding>(view)!!
binding.arg = "xyz"
container.addView(view) or container.addView(binding.rootView)
行文章视图
<layout 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">
<data>
<variable
name="arg"
type="String" />
</data>
<androidx.cardview.widget.CardView/>
</layout>