如何删除动态膨胀的视图?

时间:2012-07-03 20:46:13

标签: android

在我想要开发的简单纸牌游戏中,我有三个按钮:button1,button2和button3。 button1在tablerow中创建两个图像视图并显示图像。单击button2和/或button3时,它会通过布局inflater在tablerow上动态添加imageview。当游戏结束时,我希望用户点击button1并重新开始。我能够做到这一点,但问题是,之前通过单击button2和button3显示的图像视图也会显示。我希望在单击button1时删除它们。如何在点击button1时删除它们? 请帮帮我!

4 个答案:

答案 0 :(得分:6)

就像您添加了视图一样,您可以删除它们。只需在父容器上调用removeViewAt(int index)removeView(View view)即可删除所需的视图。

或者,如果您预见会重复使用它们,则可以将其可见性设置为GONE。然后你可以把它们带回来而不需要再次给它们充气。

如果您让inflater自动将充气的图像视图附加到父图像,那么您必须跟踪添加的视图的位置。您可以在充气之前在父级上使用getChildCount,以查找将要添加的下一个视图的索引。

答案 1 :(得分:2)

您可以使用ViewGroup.removeView(View v);

类似的东西:

tblRow.removeView(button2);

答案 2 :(得分:0)

这是我如何添加然后在5秒后删除视图(在另一个上下文中)

  final LinearLayout linearLayout = context.getResources().getLayout(R.layout.activity_main)
  LayoutInflater inflater = LayoutInflater.from(linearLayout.getContext());
  final View details = inflater.inflate(R.layout.extra_details, linearLayout, false);
  linearLayout.addView(details);

  new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (linearLayout.findViewById(R.id.extra_details) != null){
                        linearLayout.removeView(details);
                    }
                }
            }, 5000);

相同的使用场景是在onClickListener的上下文中。 点击此处https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/

答案 3 :(得分:0)

//添加视图

LayoutInflater inflater = (LayoutInflater)this.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
final View buttons = inflater.inflate(R.layout.activity, null );
addContentView(buttons, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

//删除视图

((ViewManager)buttons.getParent()).removeView(buttons);