android - 布局 Inflater、ViewGroup 和 removeView()

标签 android android-layout android-viewgroup

我想知道是否有人可以向我解释为什么在展开布局时,如果指定了 ViewGroup,则稍后的 removeView() 什么都不做。即:

在onCreate中:

    currentView = this.findViewById(android.R.id.content).getRootView();
    vg = (ViewGroup) currentView;

在后面的方法中:

            getHelp.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    LayoutInflater inflater = GraphicsActivity.this.getLayoutInflater();
                    final View faqView = inflater.inflate(R.layout.graphfaq, vg);


                    final View faqClose = findViewById(R.id.graph_faq_close);
                    faqClose.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v2) {
                            if (MainActivity.debug) Log.i(TAG,"inside faqClose listener");
                            vg.removeView(faqView);
                        }
                    });
                }
            });

这会膨胀并正确显示 faqVIew,但是当触发第二个 clickListener 时,不会删除该 View 。

但是,这样做确实会在单击关闭时删除 View :

                    final View faqView = inflater.inflate(R.layout.graphfaq, null);
                    vg.addView((faqView));

只是想更好地了解这一切是如何运作的。

TIA

最佳答案

来自文档:

public View inflate (int resource, ViewGroup root)

Returns The root View of the inflated hierarchy. If root was supplied, this is the root View; otherwise it is the root of the inflated XML file.

含义:

vg.removeView(faqView);

被解释为:

vg.removeView(vg);

那里不存在,因此无法删除。

编辑:

换句话说:vg 不能从 vg 中删除,因为 View 本身不存在。

评论:如果你不传递根,你的 View 将不会附加到任何东西,但它会膨胀。

代码有时会更好地解释它:

// This returns vg // Basically faqView == vg
View faqView = inflater.inflate(R.layout.graphfaq, vg);

// This find the layout you attached
View yourView = faqView.findViewById(R.id.graphfaq_layout);

// This removes the layout
faqView.removeView(yourView);

正如人们多次提到的那样,Android 文档是神秘的。您需要多读几遍才能了解发生了什么。

关于android - 布局 Inflater、ViewGroup 和 removeView(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25649315/

相关文章:

java - 自定义 ListView 适配器中的 NullPointer 异常

android - 自定义 FlippableStackView

android - 抽屉导航 - 部分之间的分隔线,例如 Gmail 应用程序

安卓——自动链接

android - 使用 Espresso 拍摄屏幕截图

java - 自定义 View ,将它们动态插入到 Java 中的布局中

android - 如何在基于 RecyclerView 的 Android 应用程序上实现多重过滤?

android - 展开组时如何更改ExpandableListView的高度

android - FrameLayout 的用途是什么,我们应该在什么场景下使用它?

android - 渲染 ViewGroup 的内容两次