繁体   English   中英

将linearlayout动态添加到Relativelayout中

[英]add linearlayout dynamically into a Relativelayout

我有这个代码,我想在嵌入在RelativeLayout内的ScrollView内嵌的LinearLayout中动态添加CheckBoxes(RelativeLayout-> ScrollView-> LinearLayout-> My ChechBoxes)

li = (RelativeLayout) findViewById(R.id.mainlayout);    
ScrollView sv = new ScrollView(this);
final LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
li.addView(sv);
sv.addView(ll);
for(int i = 0; i < 20; i++) {
    CheckBox cb = new CheckBox(getApplicationContext());
    cb.setText("I'm dynamic!");
    ll.addView(cb);
}
this.setContentView(sv);

但我得到这个错误:

03-12 20:32:14.840: E/AndroidRuntime(945): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

我的RelativeLayout已经在我的XML文件中声明了我如何解决这个问题?

this.setContentView(sv);

这将尝试你的滚动型添加到FrameLayout里android.R.id.content ,但你已经取得li的父母sv ......因此,“指定的小孩已经有母。”

我相信你可以删除 this.setContentView(sv); 因为看起来你只想将ScrollView(等)添加到RelativeLayout,而不是替换整个现有布局。

查看此http://developer.android.com/training/animation/screen-slide.html下载示例应用程序时,请浏览LayoutChangesActivity.java

以下是添加项目的代码..

private void addItem() {
    // Instantiate a new "row" view.
    final ViewGroup newView = (ViewGroup) LayoutInflater.from(this).inflate(
            R.layout.list_item_example, mContainerView, false);

    // Set the text in the new row to a random country.
    ((TextView) newView.findViewById(android.R.id.text1)).setText(
            COUNTRIES[(int) (Math.random() * COUNTRIES.length)]);

    // Set a click listener for the "X" button in the row that will remove the row.
    newView.findViewById(R.id.delete_button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Remove the row from its parent (the container view).
            // Because mContainerView has android:animateLayoutChanges set to true,
            // this removal is automatically animated.
            mContainerView.removeView(newView);

            // If there are no rows remaining, show the empty view.
            if (mContainerView.getChildCount() == 0) {
                findViewById(android.R.id.empty).setVisibility(View.VISIBLE);
            }
        }
    });

    // Because mContainerView has android:animateLayoutChanges set to true,
    // adding this view is automatically animated.
    mContainerView.addView(newView, 0);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM