java - 如何从 LinearLayout 中删除所有 LinearLayouts?

标签 java android android-layout views

我以编程方式创建了很多 LinearLayout 并将它们放在另一个 LinearLayout 上:

public void loadList(){
    LinearLayout linearLayout = (LinearLayout)findViewById(R.id.linearShowing);

    if(linearLayout.getChildCount() > 0)
        linearLayout.removeAllViews(); // THIS LINE DOESN'T WORK FOR LINEARLAYOUTS INSIDE LINEARLAYOUTS

    List<Mineral> showMineralsList = dbHandler.getAllMinerais("external");

    for (Mineral mineral : showMineralsList){
        id = mineral.getID();
        //testIds.add(id);
        int favorite = mineral.getFavorite();
        String nome = mineral.getName(),
                formulaQuimica = mineral.getFormulaQuimica();

        LinearLayout linearVertical = new LinearLayout(this);
        linearVertical.setOrientation(LinearLayout.VERTICAL);
        LinearLayout.LayoutParams lvParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        linearVertical.setLayoutParams(lvParams);

        LinearLayout linearHorizontalOuter = new LinearLayout(this);
        linearHorizontalOuter.setOrientation(LinearLayout.HORIZONTAL);
        LinearLayout.LayoutParams lhoParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        lhoParams.gravity = Gravity.CENTER_VERTICAL;
        linearHorizontalOuter.setLayoutParams(lhoParams);

        LinearLayout linearHorizontalInner = new LinearLayout(this);
        linearHorizontalInner.setOrientation(LinearLayout.HORIZONTAL);
        LinearLayout.LayoutParams lhiParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);
        lhiParams.gravity = Gravity.CENTER_VERTICAL;
        linearHorizontalInner.setLayoutParams(lhiParams);

        ImageButton ibStar = new ImageButton(this);
        LinearLayout.LayoutParams ibsParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        ibsParams.setMargins(0, 0, vinteMargin, 0);
        ibStar.setLayoutParams(ibsParams);
        if(favorite == 0)
            ibStar.setBackgroundResource(R.drawable.ic_star_gray_24dp);
        else
            ibStar.setBackgroundResource(R.drawable.ic_star_blue_24dp);
        vId = generateViewId();
        vIds.put(vId, id);
        linearHorizontalInner.setId(vId);

        linearHorizontalInner.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                i = new Intent(Main.this, Detalhes.class);
                i.putExtra("id", vIds.get(view.getId()));
                startActivity(i);
            }
        });

        vId = generateViewId();
        vIds.put(vId, id);
        ibStar.setId(vId);
        ibStar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setFavorite(vIds.get(view.getId()));
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        TextView tvName = new TextView(this);
        LinearLayout.LayoutParams tvnParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);
        tvName.setText(nome);
        tvName.setLayoutParams(tvnParams);
        tvName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 17);

        TextView tvFormula = new TextView(this);
        LinearLayout.LayoutParams tvfParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);
        tvFormula.setText(formulaQuimica);
        tvFormula.setLayoutParams(tvfParams);
        tvFormula.setTextSize(TypedValue.COMPLEX_UNIT_SP, 17);

        TableLayout.LayoutParams lpDiv = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT, 5f);
        lpDiv.setMargins(0, dezMargin, 0, dezMargin);

        ImageView ivDiv = new ImageView(this);
        ivDiv.setBackgroundResource(R.drawable.divider);
        ivDiv.setLayoutParams(lpDiv);

        linearHorizontalInner.addView(tvName);
        linearHorizontalInner.addView(tvFormula);

        linearHorizontalOuter.addView(ibStar);
        linearHorizontalOuter.addView(linearHorizontalInner);

        linearVertical.addView(ivDiv);
        linearVertical.addView(linearHorizontalOuter);

        linearLayout.addView(linearVertical);
    }
}

有时,在我的 Activity 中,我必须重新加载该列表...所以我试图使用 linearLayout.removeAllViews(); 从“linearLayout”(我的 XML 布局文件中设置的主要布局)中删除所有 View ,但是它让我:

java.lang.IllegalArgumentException:从给定 View 中找不到合适的父对象。请提供有效 View 。

最佳答案

试试这段代码

if(linearLayout.getChildCount() > 0)
        linearLayout.removeAllViews();

关于java - 如何从 LinearLayout 中删除所有 LinearLayouts?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44489289/

相关文章:

java - 什么是 e(fx)clipse?

java - 使用java将日期时间插入数据库

android - 一次在 kotlin 中迁移整个 android 项目是否安全?

android - 如何在 Android 上使用 intent 将格式正确的链接(带有井号)添加到电子邮件中?

android - Android MediaCodec 可以同时解码到两个 Surface 吗?

java - 编译错误并纠正语法

java - 类继承 : generic extends generic

android - 在android中为ListView中的每一行制作动态布局

android - AdMob "Not enough space to show ad"错误

android - 具有自定义形状的 ActionBar android