activity_main.xml:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:longClickable="false"
    android:orientation="vertical"
    android:weightSum="16"
    android:animateLayoutChanges="true">

    <LinearLayout
        android:id="@+id/ly_ll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animateLayoutChanges="true"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:padding="5dp"
            android:background="@drawable/item_background"
            android:text="Indonesia"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:padding="5dp"
            android:background="@drawable/item_background"
            android:text="English"/>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/ly_ll2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animateLayoutChanges="true"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:padding="5dp"
            android:background="@drawable/item_background"
            android:text="Spain"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:padding="5dp"
            android:background="@drawable/item_background"
            android:text="Brazil"/>

    </LinearLayout>

</LinearLayout>


MainActivity.java:

public class MainActivity extends Activity {

    LinearLayout llLayout;
    LinearLayout llLayout2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        llLayout = (LinearLayout) findViewById(R.id.ly_ll);
        llLayout2 = (LinearLayout) findViewById(R.id.ly_ll2);

        for(int i=0;i<llLayout2.getChildCount();i++){
            View views = llLayout2.getChildAt(i);
            views.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    addedViewTarget(v);
                }
            });
        }

    }

    public void addedViewTarget(View view){
        llLayout2.removeView(view);
        llLayout.addView(view);
    }

}


我有一种情况是将视图从视图组移到另一个视图组。问题是当我删除代码llLayout.addView(view);没问题,并且视图已成功擦除,但是当我要将视图添加到llLayout时,总是出现这样的错误:“指定的子代已经有一个父代。必须首先在该子代的父代上调用removeView()”。因此,我想在单击时将llLayout2中的视图移动到llLayout,你们是这种情况的最佳解决方案吗?

最佳答案

哦,是的,您是对的,我尝试了您的代码,但无法正常工作
 我尝试了几件事,然后想到了这个奇怪的解决方案:

 public void addedViewTarget(final View view) {
        ViewGroup vg = ((ViewGroup) view.getParent());
        vg.removeView(view);
        view.postDelayed(new Runnable() {
            @Override
            public void run() {
                llLayout.addView(view);
            }
        },1000 );

    }


我不知道为什么您的代码不起作用,我也不知道为什么该代码起作用,但是当您说删除视图需要花费一些时间时,或者当您尝试将视图立即添加到其他视图组时,我有这个假设它引发错误,因为删除任务尚未完成

07-28 09:27