我的活动中有一个 ScrollView ,运行时在其中添加了Views
。基本上,当玩家定义自己的姓名和性别(以及其他玩家的姓名和性别),然后单击加号按钮时,三个元素将添加到 ScrollView 内的一行中:一个用于性别的ImageView (包含男性或女性图标),用于显示玩家姓名的 TextView ,并在行尾显示删除按钮,因此可以删除此播放器,例如,如果用户输入了错误的播放器名称。
如果n
是要添加的播放器数目(或单击加号的数目),则ScrollView内部的Views数目为n*3
。
点击添加播放器的加号按钮后,我还创建一个 PlayerDraft 实例,其中包含播放器的名称,播放器的性别以及与与该播放器相关联的视图相对应的三个整数播放器(一个对应图标的ID的整数,一个对应于代表播放器名称的文本视图的ID的整数,一个表示与播放器关联的删除按钮的ID的整数)。
我还跟踪删除按钮的id
与哈希图中的 PlayerDraft 实例之间。这样,当单击某个删除按钮时,我可以使用它的id
来找到相应的 PlayerDraft 实例,从而也可以找到 View < / em>在 ScrollView 中与此播放器关联。
这是每次单击某个删除按钮时都会调用的代码(这基本上是在一个方法中,我对添加的每个删除按钮都进行调用,以将其设置为在点击侦听器实例上...此代码位于内部id
方法):
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()
ScrollView 始终仅包含一个孩子,并且该孩子在孩子数组中的位置为0。无论运行时在 ScrollView 中添加了多少视图,子代的数量都不会改变,这只会使我的名:/感到困惑。如果未将 View 显示为 ScrollView (他们正在我的手机上对其进行测试),该怎么显示呢? ?调用方法player_display_view
以删除ScrollView内部的唯一子视图,不仅删除player_display_view.removeViewAt(0);
的一个 View ,还删除所有添加的视图。
为什么会发生以下情况?尽管在运行时向其中添加了多个视图,为什么ScrollView仅包含一个孩子?如何删除ScrollView中的特定视图?
谢谢您所花的时间,我真的很感激
答案 0 :(得分:2)
通常,ScrollView
仅包含一个孩子。通常是一个由LinearLayout
滚动的容器(如RelativeLayout
或ScrollView
)。如果您正在动态地(以编程方式)将View
添加到ScrollView
,则它可能已经创建了一个内部容器Layout
来保存您添加的视图。
您应该将Layout
放在ScrollView
内,并在View
内管理(添加/删除)您的Layout
。然后,您的“删除”代码应该可以使用。