Android 从活动中删除视图

Android 从活动中删除视图,android,android-view,Android,Android View,在我的主要活动java代码文件中,我使用以下方法添加了一个新视图: public void AddNewView(View view) { Intent intent = new Intent(this, DisplayNewView.class); startActivity(intent); } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState

在我的主要活动java代码文件中,我使用以下方法添加了一个新视图:

public void AddNewView(View view) {
    Intent intent = new Intent(this, DisplayNewView.class);
    startActivity(intent);
}
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);

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

public void AddNewView(View view) {
    Intent intent = new Intent(this, DisplayNewView.class);
    startActivity(intent);
}
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);
    }
} 






单击删除按钮应删除按钮视图。如果要删除所有视图,可以使用
vg.removeallview()
正如其他人提到的,为什么要创建动态操作视图的新意图?

在我看来,您所指的“视图”实际上是一个活动,您可能只想调用“finish”来忽略“DisplayNewView”感觉像是一个XY问题[1]。你想达到什么目标?为什么要使用意图?否则,removeView代码应该确实可以工作。有人打电话吗?尝试在那里设置断点,或者只需Log.d()。[1] @domenukk我只是想修改我正在学习的教程。他们有一个按钮可以添加视图,但不能删除它。所以我尝试编写一个删除视图的按钮。该按钮是
视图
的子类(这使得@Sabriael下面的答案正确)。我认为你实际上是指活动,正如@文超所提到的。由于所有内容都在活动中,因此只需对其调用finish()就会破坏它。但是,通常一个活动只运行一次,因此您可以退出应用程序。再说一遍:你想实现什么?把活动想象成一个窗口。意图产生一个全新的窗口。相反,您可能希望使用代码中已经使用的
LayoutInflater
对新视图进行充气,并将其添加到当前视图中,如
View View View=LayoutInflater.from(context).flate(R.layout.my_layout);Button Button=(Button)view.findViewById(R.id.myButton)。。。。aGroupView.addView(按钮)[1]。如果保留该视图,可以稍后将其删除。(?)[1]我试过你的代码。单击“删除”按钮时,它会删除该按钮,但不会删除整个视图。使用removeAllViews会删除每个视图,甚至父视图。我只想把孩子带走。谢谢如果要删除其他视图,必须仅按id查找它,如下所示:
public void removeView(视图视图){view myView=findViewById(R.id.myViewLabel);ViewGroup vg=(ViewGroup)(view.getParent());vg.removeView(myView);}
删除文本视图,但我需要的是删除活动显示新视图的整个布局,然后再次显示显示视图…有点像浏览器中的“后退”按钮。原谅我,我是一个Android新手没问题使用
finish()在removeView函数中,如so
public void removeView(视图视图){finish();}
它会工作。但通过这种方式,您不仅可以删除创建的布局,还可以关闭活动。用xml创建活动布局更容易、更快。如上所述,您有两个活动和两个共同响应它们的布局,您可以使用
super.onCreate(savedInstanceState)填充它们;setContentView(R.layout.activity_main)如果没有特殊原因,您不必以编程方式创建布局并将其膨胀。
<?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>