如何删除使用addContentView添加的视图?

时间:2015-01-13 14:40:46

标签: java android

我已使用addContentView()成功将子视图添加到父视图。但是当我试图删除视图时,它给了我一个空指针异常。

    //Working Code
    Button button1=(Button) findViewById(R.id.button1);
    button1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v)
        {
            getWindow().addContentView(getLayoutInflater().inflate(R.layout.customlayout, null),new FrameLayout.LayoutParams(
                    LayoutParams.MATCH_PARENT,
                    LayoutParams.WRAP_CONTENT ));
        }   
    });


    //Code not Working
    Button button2=(Button) findViewById(R.id.button2);
    button2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v)
        {
            View myView = findViewById(R.layout.customlayout);
            ViewGroup parent = (ViewGroup) myView.getParent();
            parent.removeView(myView);
        }   
    });

3 个答案:

答案 0 :(得分:1)

xml中的

为您的根布局提供一个id

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/InflateViewLinearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

</LinearLayout>

在代码中你可以做这样的事情

View viewToRemove= findViewById(R.id.InflateViewLinearLayout);
if (viewToRemove != null && (ViewGroup) viewToRemove.getParent() != null && viewToRemove instanceof ViewGroup)
      ((ViewGroup) viewToRemove.getParent()).removeView(viewToRemove);

答案 1 :(得分:1)

  ViewGroup viewHolder = (ViewGroup)ViewToRemove.getParent();
  viewHolder.removeView(ViewToRemove);

这对我有用。

答案 2 :(得分:0)

@Aalia您必须使用 id 但布局确定视图。

View myView = findViewById(R.id.id_of_the_customlayout);

请设置该customlayout.xml的顶级ViewGroup的ID。