如何删除 ScrollView 中的单个视图

How to delete a single View inside a ScrollView

我的 activity 中有一个 ScrollView,在运行时向其添加 Views。基本上,当玩家定义自己的姓名和性别(以及其他玩家的姓名和性别)然后单击加号按钮时,三个元素将添加到 ScrollView 中的一行:一个 ImageView 用于性别(包含男性或女性图标),一个 TextView 用于显示玩家的名字和一个 删除按钮 在行尾,因此可以删除该玩家,例如,如果用户输入错误的玩家名称。

如果n是添加的玩家数量(或者点击加号按钮的数量),那么ScrollView里面的View数量就是n*3.

点击添加球员的加号按钮后,我还创建了一个PlayerDraft实例,里面包含了球员的名字,球员的性别,views对应的三个整数与播放器关联的(一个 int 对应图标的 id,一个 int 对应对应文本视图的 id,代表玩家的名字,另一个 int 对应与播放器关联的删除按钮的 id)。

我还在哈希图中跟踪删除按钮的 id 和这个 PlayerDraft 实例。这样,当单击某个删除按钮时,我可以使用它的 id 找到相应的 PlayerDraft 实例,因此也找到 id 的 [=] 41=]Views 在 ScrollView.

中与此播放器关联

这是每次单击某个删除按钮时调用的代码(这基本上是在我调用每个添加的删除按钮以将其设置为点击侦听器实例的方法中...此代码是在 setOnClickListener 方法中):

public void onClick(View v)
    //delete corresponding player gender icon, player name and the delete button itself
    PlayerDraft playerToDelete = idToPlayer.get(v.getId());
    if(null != playerToDelete) {
            ImageView iconToDelete = findViewById(playerToDelete.getIconViewId());
            TextView textToDelete = findViewById(playerToDelete.getNameViewId());
            Button b = (Button) v;

            Log.d("thc", "Icon id that is to be deleted: " + iconToDelete.getId());
            Log.d("thc", "name view id that is to be deleted: " + textToDelete.getId());
            Log.d("thc", "delete button id to be deleted: " + b.getId());

            player_display_view.removeView(iconToDelete);
            player_display_view.removeViewInLayout(textToDelete);
            player_display_view.removeViewInLayout(b);

            //player_display_view.removeViewAt(0);
            //player_display_view.removeAllViews()

            Log.d("thc", "Number of elements in player_display_view scrollview: " + player_display_view.getChildCount());
    } else {
       Log.d("thc", "playerToDelete is null!");
    }
}

问题是调用 player_display_view.removeView(iconToDelete) 或任何类似的方法不起作用! 但是,调用 player_display_view.removeAllViews() 有效。

我发现了以下问题。 player_display_view ScrollView 始终只包含一个子项,并且该子项在其子项数组中位于位置 0。无论在运行时向 ScrollView 添加多少视图,子项的数量都不会改变,这让我很困惑:/。 View 怎么能显示在 ScrollView 中(他们是,在我的 phone 上测试),如果它们不是是否指定为 ScrollView 的子项?调用方法 player_display_view.removeViewAt(0); 删除 ScrollView 中的这个唯一的子视图,不仅会删除 ScrollView 的一个 View,还会删除所有添加的视图。

为什么会出现下面的情况?为什么 ScrollView 只包含一个子视图,尽管在运行时向它添加了多个视图?如何删除 ScrollView 中的特定视图?

感谢您抽出时间,我真的很感激

一般来说,一个ScrollView只包含一个child。这通常是由 ScrollView 滚动的容器(如 LinearLayoutRelativeLayout)。如果您动态地(以编程方式)将 View 添加到 ScrollView,它可能已经创建了一个内部容器 Layout 来保存您添加的视图。

您应该在 ScrollView 中放置一个 Layout,并在 Layout 中管理 (add/delete) 您的 View。那么您的 "delete" 代码应该可以工作。