有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将linearlayout动态添加到Relativelayout中

我有这段代码,我想在嵌套在RelativeLayout(RelativeLayout->;ScrollView->;LinearLayout->;我的复选框)中的ScrollView中的LinearLayout中动态添加复选框

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文件中声明 我怎样才能解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    检查这个http://developer.android.com/training/animation/screen-slide.html 下载示例应用程序时,请查看LayoutChangesActivity。爪哇

    以下是添加项目的代码

    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);
    }