从 activity 中删除一个视图

removing a view from the activity

在我的主 activity java 代码文件中,我使用此方法添加了一个新视图:

public void AddNewView(View view) {
    Intent intent = new Intent(this, DisplayNewView.class);
    startActivity(intent);
}

这使用了一个名为 DisplayNewView 的 class,它具有以下方法:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    TableLayout.LayoutParams tlp = new TableLayout.LayoutParams(
            TableLayout.LayoutParams.WRAP_CONTENT,
            TableLayout.LayoutParams.WRAP_CONTENT);

    LayoutInflater inflater = getLayoutInflater();
    View view;
    view = inflater.inflate(R.layout.activity_display_view, null);
    TextView tv = (TextView) view.findViewById(R.id.myViewLabel);
    tv.setTextSize(40);

    addContentView(view,tlp);

}

这样就成功添加了视图。

但是现在,在这个视图使用的同一个 xml 资源文件中,我有一个按钮可以删除这个视图。此按钮也在同一个 DisplayNewView java 代码文件中。

看起来像这样:

public void removeView(View view) {
    ViewGroup vg = (ViewGroup)(view.getParent());
    vg.removeView(view);
}

但是当我点击按钮时,没有任何反应。我在 Android Studio 的调试器控制台中也没有看到任何错误。

从我的网络搜索来看,我似乎正在尝试以正确的方式删除视图。

有什么我遗漏的吗?

谢谢!

我已经重现了您的问题,并且在提供的代码中没有发现任何错误。据我了解你应该有类似的东西:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button buttonadd = (Button) findViewById(R.id.addButton);

        buttonadd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AddNewView(view);
            }
        });
    }

    public void AddNewView(View view) {
        Intent intent = new Intent(this, DisplayNewView.class);
        startActivity(intent);
    }
} 


public class DisplayNewView extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TableLayout.LayoutParams tlp = new TableLayout.LayoutParams(
                TableLayout.LayoutParams.WRAP_CONTENT,
                TableLayout.LayoutParams.WRAP_CONTENT);

        LayoutInflater inflater = getLayoutInflater();
        View view;
        view = inflater.inflate(R.layout.activity_display_view, null);
        TextView tv = (TextView) view.findViewById(R.id.myViewLabel);
        tv.setTextSize(40);

        Button buttondelete = (Button) view.findViewById(R.id.deleteButton);
        buttondelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                removeView(view);
            }
        });

        addContentView(view, tlp);

    }

    public void removeView(View view) {
        ViewGroup vg = (ViewGroup) (view.getParent());
        vg.removeView(view);
    }
}


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.stackquest.MainActivity">

    <Button
        android:id="@+id/addButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add">
    </Button>
</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_display_new_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.stackquest.DisplayNewView">


    <TextView
        android:id="@+id/myViewLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <Button
        android:id="@+id/deleteButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Delete">
    </Button>
</LinearLayout>

点击删除按钮应该删除按钮视图。如果您希望删除所有视图,您可以使用 vg.removeAllViews(); 并且正如其他人所提到的,为什么要创建动态操作视图的新意图?