从活动中移除视图

时间:2017-01-09 21:36:22

标签: android android-view

在我的主要活动java代码文件中,我正在使用此方法添加新视图:

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

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

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的调试器控制台中看到任何错误。

从我的网络搜索中,看起来我正试图以正确的方式删除视图。

我有什么遗漏吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我重新创建了您的问题,但我发现代码中没有任何错误。根据我的理解,你应该有类似的东西:

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();,而其他人已经提到为什么要创建动态操作视图的新意图?