将视图从视图组移动到另一个视图组

时间:2018-05-28 16:39:26

标签: java android

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添加视图总是出现错误时这个&#34; 指定的孩子已经有了父母。您必须首先在孩子的父母上调用removeView() &#34;。所以,我想在点击时将llLayout2中的视图移动到llLayout,你们是这个案例的最佳解决方案吗?

2 个答案:

答案 0 :(得分:0)

试试这个

if(view.getParent()!=null)
    ((ViewGroup)view.getParent()).removeView(view);
llLayout.addView(view);

答案 1 :(得分:0)

是的,你是对的,我尝试了你的代码并且无法正常工作  我尝试了一些东西,我想出了这个奇怪的解决方案:|

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

    }

我不知道为什么你的代码不起作用我不知道为什么这个代码工作但我有这个假设当你说删除查看它需要一些时间可能在其他线程和当你尝试添加视图其他ViewGroup立即引发错误,因为删除任务尚未完成