LinearLayout.removeAllViews不能使用以编程方式创建的元素

时间:2014-04-20 23:14:38

标签: android android-layout

我尝试以编程方式在Android中创建UI元素。它正在工作,但当我按下后退按钮并返回创建元素的活动后,我想删除以前创建的元素。我在onCreate方法中尝试了以下代码:

((LinearLayout) findViewById(R.id.mainContainer)).removeAllViews();
        ((LinearLayout) findViewById(R.id.mainContainer)).addView(generateElementsDynamically());

我的generateElementsDynamically()方法:

public static LinearLayout generateElementsDynamically()
    {
        LinearLayout main = new LinearLayout(context);
        main.setOrientation(LinearLayout.VERTICAL);
    LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    main.setLayoutParams(layoutParams1);

    for (int i = 0; i < ServicesStorage.listServiceDetails.size(); i++)
    {
        LinearLayout lin = new LinearLayout(context);
        for (int j = 0; j < ServicesStorage.listServiceDetails.get(i).size(); j++)
        {
            lin.setOrientation(LinearLayout.HORIZONTAL);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            lin.setLayoutParams(layoutParams);
            TextView txt = new TextView(context);
            txt.setText(ServicesStorage.listServiceDetails.get(i).get(j).toString());
            txt.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            lin.addView(txt);
        }
        main.addView(lin);
    }
    return main;
}

知道出了什么问题吗?

由于

2 个答案:

答案 0 :(得分:1)

我找到了解决方案,但我不确定它是否是最好的。 出于某种原因,我必须清除ServicesStorage.listServiceDetails列表,然后再次填充它......并且它正在工作

答案 1 :(得分:0)

我认为您正在尝试使用新数据刷新UI。我建议你改变你的设计。您可以使用ListView并将其填入新数据。他们改变的任何时候你都可以打电话

listview.notifySetDataChanged();

相关问题