Android:使用 setContentView 删除布局集时遇到问题



正如标题所暗示的那样,我在清除/删除/杀死使用setContentView设置的布局时遇到问题。当我按下屏幕上的后退按钮时,可以看到问题。

详-

从父布局xyz_parent_layout,我调用了一个方法showMeTheImage()通过调用setContentView(yzx_image_layout)加载图像预览。现在回到xyz_parent_layout,按后退按钮,该按钮调用parent.removeView(imageview)但没有任何反应。我也用过((ViewManager)imageview.getParent()).removeView(imageview),这会清除图像预览,但之后会出现空白屏幕。

另一个问题是,通过在图像预览屏幕上按后退硬键实际上是在父屏幕上处理的。

我还想了解如何在图像视图屏幕上处理后退硬键。

不知道发生了什么,任何帮助真的很感激。

更新 - 使用代码

parent = (LinearLayout)mInflater.inflate(R.layout.parent, null);
button = (Button)parent.findViewById(R.id.button_dosomething);
button.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View buttonView)
    {
        showImageView();
    }
});
context.setContentView(parent);
showImageView()
{   
    imagePreview = (RelativeLayout)mInflater.inflate(com.xxx.R.layout.yzx_image_layout,null);
    Button back = (Button)imagePreview.findViewById(com.xxx.R.id.back_button);
    back.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View backButton)
                    {
                        //Do something
                    }
                });         
    parent.addView(imagePreview);           
    context.setContentView(parent);         
}

谢谢货号

你想错了。当您第二次调用setContentView()时,它不会将该layout设置为xyz_parent_layout.xml的孩子。它将整个屏幕的内容设置为 yzx_image_layout .

听起来您想做的是给yzx_image_layout.xml充气并将其添加到showMeTheImage()函数中的xyz_parent_layout中。然后,当您在父layout上调用removeView()时,它将删除该孩子。

我不知道你在做什么,但另一种可能更容易的选择是将您的图像布局放在一个单独的Activity然后在您的函数中启动该Activity。这样,当您按下后退按钮时,它将从堆栈中删除该Activity并返回到您拥有xyz_parent_layout的第一Activity

听起来您不希望这是全屏Activity因此您可以将以下行添加到manifest.xml中的相应<activity>标记中

android:theme="@android:style/Theme.Dialog"

给它一个Dialog的外观。

编辑

setContentView(R.layout.parent);   // assuming you have a layout file named parent.xml
parent = (LinearLayout)mInflater.inflate(R.layout.parent, null);
button = (Button)parent.findViewById(R.id.button_dosomething);
startOdometerPic.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View buttonView)
    {
        showImageView();
    }
 });

并删除

context.setContentView(parent); 

从您的showImage()函数。

最新更新