Java 如何从线性布局中删除所有线性布局?

Java 如何从线性布局中删除所有线性布局?,java,android,android-layout,views,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

我以编程的方式创建了许多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);
    }
}
public void loadList(){
LinearLayout LinearLayout=(LinearLayout)findViewById(R.id.linearShowing);
if(linearLayout.getChildCount()>0)
linearLayout.removeAllViews();//此行不适用于linearLayout内部的linearLayout
列表showMineralsList=dbHandler.getAllMinerais(“外部”);
对于(矿物:showMineralsList){
id=mineral.getID();
//添加(id);
int favorite=mineral.getFavorite();
字符串nome=mineral.getName(),
formulaQuimica=矿物。getFormulaQuimica();
LinearLayout linearVertical=新的LinearLayout(此);
linearVertical.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams lvParams=新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.WRAP_内容);
linearVertical.setLayoutParams(lvParams);
LinearLayout LinearOrizontalouter=新的LinearLayout(本);
LinearHorizontaloter.设置方向(LinearLayout.水平);
LinearLayout.LayoutParams lhoParams=新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.WRAP_内容);
lhoParams.gravity=重心垂直;
linearHorizontalOuter.setLayoutParams(lOparams);
LinearLayout LinearOrizontaliner=新的LinearLayout(本);
LinearHorizontaliner.setOrientation(LinearLayout.Horizontaliner);
LinearLayout.LayoutParams LHIParms=新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.WRAP_内容,1.0f);
lhiParams.gravity=gravity.CENTER_垂直;
linearhorizontaliner.setLayoutParams(lhiParams);
ImageButton ibStar=新的ImageButton(本);
LinearLayout.LayoutParams ibsParams=新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_内容,LinearLayout.LayoutParams.WRAP_内容);
ibsParams.setMargins(0,0,vinteMargin,0);
ibStar.setLayoutParams(ibsParams);
如果(收藏夹==0)
ibStar.setBackgroundResource(R.drawable.ic_star_gray_24dp);
其他的
ibStar.setBackgroundResource(R.drawable.ic_star_blue_24dp);
vId=生成视图();
vIds.put(vId,id);
线状纹状体(vId);
linearhorizontaliner.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
i=新意图(Main.this,Detalhes.class);
i、 putExtra(“id”,vIds.get(view.getId());
星触觉(i);
}
});
vId=生成视图();
vIds.put(vId,id);
ibStar.setId(vId);
ibStar.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
setFavorite(vIds.get(view.getId());
Snackbar.make(查看“替换为您自己的操作”,Snackbar.LENGTH\u LONG)
.setAction(“Action”,null).show();
}
});
TextView tvName=新的TextView(此);
LinearLayout.LayoutParams TVnParms=新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父级,LinearLayout.LayoutParams.MATCH_父级,1.0f);
tvName.setText(nome);
tvName.setLayoutParams(tvnParms);
tvName.SettexSize(TypedValue.COMPLEX\u UNIT\u SP,17);
TextView tvFormula=新的TextView(此);
LinearLayout.LayoutParams tvfParams=新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.MATCH_父项,1.0f);
tvFormula.setText(formulaQuimica);
tvFormula.setLayoutParams(tvfParams);
tvFormula.SettexSize(TypedValue.COMPLEX\u UNIT\u SP,17);
TableLayout.LayoutParams lpDiv=新的TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_父项,TableLayout.LayoutParams.WRAP_内容,5f);
lpDiv.setMargins(0,dezMargin,0,dezMargin);
ImageView ivDiv=新的ImageView(本);
ivDiv.退根资源(R.可拔取分隔器);
ivDiv.setLayoutParams(lpDiv);
linearhorizontaliner.addView(tvName);
linearhorizontaliner.addView(tvFormula);
linearHorizontalOuter.addView(ibStar);
addView(linearhorizontaliner);
linearVertical.addView(ivDiv);
linearVertical.addView(linearHorizontalOuter);
linearLayout.addView(linearVertical);
}
}
有时,在我的活动中,我必须重新加载该列表。。。因此,我尝试使用linearLayout.removeAllViews();,从“linearLayout”(我的XML布局文件上的主布局集)中删除所有视图;,但这让我感到:


java.lang.IllegalArgumentException:在给定视图中找不到合适的父级。请提供有效的视图。

我通过执行以下操作解决了此问题:

  • 为我的“linearVertical”(对应于我的主父LinearLayout的第一个子项)设置ID
  • 每次创建新的linearVertical时,将此ID添加到列表中
  • 迭代此列表并将该列表中ID为GONE的所有视图的可见性设置为GONE
代码:

private ArrayList layoutsIds=new ArrayList();
公共无效加载列表(){
重置视图();
(...)
(...)
layoutId=generateViewId();
linearVertical.setId(layoutId);
layoutsIds.add(layoutId);
(...)
(...)
}
公共视图(){
对于(inta=0;a请尝试以下代码

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

哈哈,这是我发布代码的第三行…我已经用我的答案解决了…谢谢!
if(linearLayout.getChildCount() > 0)
        linearLayout.removeAllViews();