IllegalStateException:指定的子级已有父级。你必须先在孩子的父母身上调用removeView()

时间:2018-06-15 13:43:51

标签: android android-linearlayout

我是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()”。

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

1 个答案:

答案 0 :(得分:0)

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

将其删除
 ((ViewGroup)scrollAppsView.getParent()).removeView(scrollAppsView);

然而(即使我不知道你想要做什么)我很确定你是以错误的方式接近这个。如果您已将TextView包含在xml中,则没有理由再次以programmaticaly方式添加它们。它们已经添加完毕。