我想知道是否有人可以向我解释为什么在展开布局时,如果指定了 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/