【发布时间】:2018-05-15 05:11:52
【问题描述】:
场景是,当用户点击按钮时,我需要添加 特定布局在父布局的已知位置上的按钮点击次数。
我不知道它是否有效。我尝试了从其他帖子中获得的以下解决方案
Buttononclicklistenercode 是,
parent = (ViewGroup) C.getParent();//c is a layout in which position i want to add view
final int index = parent.indexOfChild(C);
tobeadded=getLayoutInflater().inflate(R.layout.block_tobeadded_foremi,null);
((Button)findViewById(R.id.button88)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addviewcount+=1;
LinearLayout addinglayout=new LinearLayout(MyActivity.this);
addinglayout.setOrientation(LinearLayout.VERTICAL);
parent.removeViewAt(index);
addinglayout.removeAllViews();
for(int i=0;i<addviewcount;i++)
addinglayout.addView(tobeadded);
parent.addView(addinglayout, index);
}
});
但是我得到 java.lang.IllegalStateException: The specified child has a parent。您必须先在孩子的父级上调用 removeView()。 在我的代码中,在添加该布局之前,我已经为父级调用了方法 removeViewAt()。
任何人都可以帮助我知道其中有什么问题。还有其他方法可以做到这一点吗?提前致谢!
【问题讨论】:
-
您到底想要什么,您是要删除以前的布局,然后替换新的布局,还是只想在单击按钮时添加布局?
-
我只想在单击按钮时向该布局添加一个视图(
addinglayout) -
试试这个link,可能会满足您的要求。
-
在您的 for 循环中,您将添加“addviewcount”乘以“待添加”。这就是您收到此错误的原因。首先,您还必须在循环中调用 removeview
-
在 for 之外调用 removeView 是没用的。它抛出异常是因为考虑到我在 for 循环中是 '0' 它将使用“addinglayout.addView(tobeadded);”添加视图现在当我增加到“1”时,它会尝试再次添加视图,但是在“0”处添加的视图呢(当我为“0”时)。
标签: android android-layout dynamic