首页 > 解决方案 > IllegalStateException:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()

问题描述

我是 Android 新手,正在尝试创建一个 LinearLayout 并向其中添加 TextViews。

private TextView listOfInstalledApplicationsText;
private TextView listOfInstalledPackagesText;
private TextView scrollAppsView;
private ArrayList<CharSequence> installedApplications;
private ArrayList<CharSequence> installedPackages;
private LinearLayout layout;


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

    listOfInstalledApplicationsText = (TextView) findViewById(R.id.installedAppsView);
    listOfInstalledPackagesText = (TextView) findViewById(R.id.installedPackagesView);
    layout = findViewById(R.id.dropDownMenuLayout);

    LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.FILL_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
    );



    installedApplications = this.getApplicationNames();
    installedPackages = this.getPackageNames();

    scrollAppsView = findViewById(R.id.scrollAppNamesView);

    layout.addView(scrollAppsView);

}

不幸的是,在最后一行我收到以下错误:“IllegalStateException:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()”。

有谁知道如何解决这一问题?

标签: androidandroid-linearlayout

解决方案


正如例外所说...一个视图不能被添加超过一次。您的视图在活动的 xml 中定义,因此具有父级。您在其中编写它的 ViewGroup。如果由于某种原因您想将该视图移动到另一个 ViewGroup,那么您必须首先通过调用将其删除

 ((ViewGroup)scrollAppsView.getParent()).removeView(scrollAppsView);

但是(即使我不知道您要做什么)我很确定您以错误的方式处理此问题。如果您在 xml 中包含了 TextView,则没有理由以编程方式再次添加它们。它们都已添加。


推荐阅读