从ScrollView的布局中删除视图

时间:2013-11-06 13:15:06

标签: android android-layout scrollview

我有一个ScrollView LinearLayout。将布局添加到我的LinearLayout后,我想删除该视图,但只删除了第一个视图。

我试过了parent.removeView(myView)

我的布局代码添加:

LayoutInflater inflater = getLayoutInflater();

final View view_top = inflater.inflate(R.layout.layout_top, linear_layout,false);
final View view_bottom = inflater.inflate(R.layout.layout_bottom,linear_layout,false);


final RelativeLayout rel_layout_bottom = (RelativeLayout) view_bottom.findViewById(R.id.relative_bottom);

Button btn_update = (Button) rel_layout_bottom.findViewById(R.id.lst_todo_update);

ImageButton btn_remove = (ImageButton) rel_layout_bottom.findViewById(R.id.lst_btn_delete);

ImageButton btn_Color = (ImageButton) rel_layout_bottom.findViewById(R.id.lst_btn_color);


final RelativeLayout rel_layout_top = (RelativeLayout) view_top.findViewById(R.id.relative_top );
final TextView note_Title = (TextView) rel_layout_top.findViewById(R.id.lst_title );
final TextView note_color = (TextView) rel_layout_top.findViewById(R.id.lst_color_type );

note_Title.setText(note_title);

linear_layout.addView(rel_layout_bottom, 0);


JSONArray jsonArray=queryResult.getResultObjects().get(count).getJSONArray("todo_item");

for (int i = 0; i < jsonArray.length(); i++) {


    final View view_middle  = inflater.inflate(R.layout.layout_middle, linear_layout, false);

    final RelativeLayout rel_layout_middle = (RelativeLayout) view_middle.findViewById(R.id.relative_middle);

    final CheckBox note_check ;

    final TextView note_content ;

    note_content = (TextView) rel_layout_middle.findViewById(R.id.lst_content);
    note_check = (CheckBox) rel_layout_middle.findViewById(R.id.lst_check);
    btn_remove.setOnClickListener(null);
    try {

        //Getting data correctly here

        linear_layout.addView(view_middle,0);

        btn_remove.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {               

               linear_layout.removeView(view_middle);        //Not able to remove the view here i.e view_middle
               linear_layout.removeView(view_top);
               linear_layout.removeView(view_bottom);

            }
        }); 


    } catch (JSONException e) {

        e.printStackTrace();
    }

}

linear_layout.addView(rel_layout_top , 0);

}

任何答案赞赏......哎呀

2 个答案:

答案 0 :(得分:0)

代码

btn_remove.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {               

               linear_layout.removeView(view_middle);        //Not able to remove the view here i.e view_middle
               linear_layout.removeView(view_top);
               linear_layout.removeView(view_bottom);

            }
        });

处于for循环中。

这意味着点击该按钮只会删除最后添加到view_middle的{​​{1}},因为您使用的是相同的对象名称。

答案 1 :(得分:0)

如下所示将解决您的问题。

final View[] view_middleArr;
for (int i = 0; i < jsonArray.length(); i++) {
    view_middleArr = new View[jsonArray.length()];
    view_middleArr[i]  = inflater.inflate(R.layout.layout_middle, linear_layout, false);
    // ...

        btn_remove.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {               

                for (View view_middle : view_middleArr) {
                     linear_layout.removeView(view_middle);  
                }                           
               linear_layout.removeView(view_top);
               linear_layout.removeView(view_bottom);
            }
        }); 
}

修改:您对循环中的所有view_middle位置使用相同的view_middle引用,因此您只能使用代码删除最后view_middle个实例。