gpt4 book ai didi

android - 当向其中添加项目时,另一个 ListView 中的 ListView 不会扩展

转载 作者:行者123 更新时间:2023-11-29 20:48:18 26 4
gpt4 key购买 nike

我有一个包含许多不同元素的 ListView ,例如 EditText、TextView 和 ListView。

我知道在另一个 Listview 中添加一个 Listview 听起来有点奇怪,但我有我的理由。我需要做的是使内部 Listview “可扩展”。无论何时添加或删除项目,它都应该扩展和收缩。我试过给 ListView 高度:wrap_content,但它没有做任何事情。当我将项目添加到列表时,它们只是隐藏起来,因为没有空间容纳它们。

如何让这个内部 ListView 在添加项目时自行展开?(它需要是 ListView 中的 ListView !因此,请不要对其他类型的实现提出其他建议:))

这里是包含外部布局的项目布局的 xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
android:padding="10dp">

<TextView
android:id="@+id/trainingpass_headline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="false"
android:layout_alignParentTop="true"
android:text="Trainingpass"
android:textSize="16dp"
android:textColor="@android:color/white"
android:background="@android:color/holo_blue_dark"
android:height="35dp"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:textIsSelectable="true"
android:textStyle="bold"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<ImageView
android:id="@+id/trainingpass_showhide_imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_blue_dark"
android:height="25dp"
android:minWidth="50dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:padding="7dp"
android:layout_alignBottom="@+id/trainingpass_headline"
android:src="@mipmap/arrows_up_down"
android:layout_alignParentTop="true" />

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/trainingpass_headline"
android:layout_alignLeft="@+id/trainingpass_headline"
android:layout_alignStart="@+id/trainingpass_headline"
android:id="@+id/trainingPassContainer"
android:background="@color/blue_bg_neutral"
android:visibility="visible"
android:paddingBottom="10dp">

<EditText
android:id="@+id/trainingpass_exercise_searchfield"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:hint="Name of exercise"
android:padding="6dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:background="@color/blue_bg_inputField"
android:layout_margin="10dp" />

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/trainingpass_exercise_searchfield"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/sets_container"
android:background="@color/blue_bg_inputField"
android:padding="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp">

<TextView
android:id="@+id/txt_sets_for_exercise"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Sets for exercise"
android:textSize="14dp"
android:textColor="@android:color/black"
android:paddingRight="30dp"
android:paddingLeft="0dp"
android:paddingTop="0dp"
android:paddingBottom="10dp"
android:textStyle="bold"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/add_set_button"
android:layout_alignEnd="@+id/add_set_button" />

<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/trainingpass_sets_listview"
android:nestedScrollingEnabled="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignTop="@+id/txt_no_sets" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add set"
android:id="@+id/add_set_button"
android:layout_below="@+id/trainingpass_sets_listview"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add exercise"
android:id="@+id/add_exercise_button"
android:layout_below="@+id/add_set_button"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<TextView
android:id="@+id/txt_no_sets"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No sets yet"
android:textSize="14dp"
android:textColor="@android:color/black"
android:paddingRight="30dp"
android:paddingLeft="10dp"
android:paddingTop="20dp"
android:paddingBottom="10dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_below="@+id/txt_sets_for_exercise"
android:visibility="invisible" />
</RelativeLayout>

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_below="@+id/sets_container"
android:id="@+id/exercises_container"
android:background="@color/blue_bg_inputField"
android:padding="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp">

<TextView
android:id="@+id/txt_exercises"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exercises"
android:textSize="14dp"
android:textColor="@android:color/black"
android:paddingRight="30dp"
android:paddingLeft="0dp"
android:paddingTop="0dp"
android:paddingBottom="10dp"
android:textStyle="bold"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/txt_no_exercises_yet"
android:layout_alignEnd="@+id/txt_no_exercises_yet" />

<TextView
android:id="@+id/txt_no_exercises_yet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No exercises yet"
android:textSize="14dp"
android:textColor="@android:color/black"
android:paddingRight="30dp"
android:paddingLeft="10dp"
android:paddingTop="20dp"
android:paddingBottom="10dp"
android:layout_below="@+id/txt_exercises"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/exercises_listview"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/txt_exercises"
android:layout_alignBottom="@+id/txt_no_exercises_yet" />

</RelativeLayout>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Delete"
android:id="@+id/delete_trainingpass_button"
android:layout_alignRight="@+id/exercises_container"
android:layout_alignEnd="@+id/exercises_container"
android:layout_below="@+id/exercises_container"
android:background="@color/btn_red"
android:layout_marginLeft="10dp" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Done"
android:id="@+id/done_trainingpass_button"
android:layout_below="@+id/exercises_container"
android:layout_alignLeft="@+id/exercises_container"
android:layout_alignStart="@+id/exercises_container"
android:layout_toStartOf="@+id/delete_trainingpass_button"
android:background="@color/btn_green"
android:layout_marginRight="10dp" />

</RelativeLayout>

</RelativeLayout>

在上面的代码中,我想要扩展的 ListView 是“trainingpass_sets_listview”。

这是“trainingpass_sets_listview”项目的 xml 布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
android:textAlignment="center"
android:transitionGroup="true">

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="X"
android:id="@+id/btn_delete_set"
android:background="@color/btn_red"
android:height="40dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignBottom="@+id/btn_minus_set" />

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/field_sets"
android:minWidth="50dp"
android:background="@color/white"
android:textAlignment="center"
android:padding="10dp"
android:editable="false"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/btn_plus_set"
android:layout_toEndOf="@+id/btn_plus_set" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14dp"
android:id="@+id/txt_setNo"
android:layout_alignParentTop="true"
android:layout_alignBottom="@+id/field_sets" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="25dp"
android:layout_height="wrap_content"
android:text="+"
android:id="@+id/btn_plus_set"
android:layout_marginLeft="25dp"
android:layout_marginStart="40dp"
android:layout_alignBottom="@+id/field_sets"
android:layout_toRightOf="@+id/txt_setNo"
android:layout_toEndOf="@+id/txt_setNo"
android:layout_alignParentTop="true"
android:background="@color/blue_bg_inputField_darker" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="25dp"
android:layout_height="wrap_content"
android:text="-"
android:id="@+id/btn_minus_set"
android:layout_toRightOf="@+id/field_sets"
android:layout_toEndOf="@+id/field_sets"
android:layout_alignParentTop="true"
android:background="@color/blue_bg_inputField_darker"
android:layout_alignBottom="@+id/field_sets" />
</RelativeLayout>

如果需要更多信息或代码,请询问。

提前致谢:)

最佳答案

It needs to be a listview in a listview!

你做不到。 ListViews 并未设计为相互嵌入。这进一步扩展为:永远不要嵌入向同一方向滚动的可滚动小部件。这是 Android 中的一大禁忌。虽然你可以让类似的东西工作......但它会遇到问题并且永远不会 100% 工作。

So please, no other suggestions about other kinds of implementations:)

那么您的问题就只能得到否定答案。但是,让我们假装它可以工作。请允许我另外说明为什么您不应该采用您的方法。

性能:每个 ListView 都由一个适配器支持。每个适配器都有一个方法,getView(),用于生成显示在 ListView 屏幕上的每个项目。无法保证在呈现到屏幕时为每个项目的位置调用多少次 getView()。每个位置被调用 3-4 次并不反常。如果每个位置都包含一个 ListView (正如您尝试做的那样),而它又拥有自己的适配器,那么它还会另外对每个项目进行多次渲染。这一切都很快,增加了将某些东西渲染到屏幕上所花费的传递次数,并且您正在对性能造成很大的打击。

重新发明轮子:正如@Fareya 所指出的,Android 已经提供了一种创建此类 UI 外观的解决方案,它称为 ExpandableListView。它可以很容易地做你想做的事。通过使用它而不是尝试推出自己的解决方案,您将节省时间和减少挫折。

关于android - 当向其中添加项目时,另一个 ListView 中的 ListView 不会扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29834023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com