【问题标题】:Android: Trouble removing a Layout set using setContentViewAndroid:使用 setContentView 删除布局集时遇到问题
【发布时间】:2013-09-24 20:11:55
【问题描述】:

正如标题所示,我无法清除/删除/终止使用 setContentView 设置的布局。当我按下屏幕上的返回按钮时会出现问题。

详情-

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

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

我也想了解如何处理 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);         
}

谢谢, SKU

【问题讨论】:

    标签: android android-layout android-intent android-emulator


    【解决方案1】:

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

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

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

    听起来您不希望它成为全屏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() 函数。

    【讨论】:

    • 我想我明白你在说什么,但要确保 - 你的建议是做 parent.addView(imageView) 然后使用 parent.removeView(imageview) 清除它。使用另一个 Activity 是我在这个项目中没有奢侈使用的东西。
    • 是的,但要确保 imageView 没有父 layout。如果是这样,您必须先将其从当前父级中删除,然后再将其添加到新父级
    • 您好 codeMagic,非常感谢您的帮助和跟进。在您的第一个建议之后,我尝试了以下操作-我膨胀了父布局,然后膨胀了 imageview 布局,后来将其添加到父级,然后 setContentView(parent)。但这画了一个空白页。
    • 调用setContentView() 然后 膨胀你的第二个layout 并将它添加到你在setContentView() 膨胀的layout。调用setContentView()inflatinglayout 的一种方式。当你最后一次调用它时,它只是将 layout 设置为该方法中的任何内容,而你之前所做的 layout 东西不再重要了
    • codeMagic,我不确定我是否理解你之前的陈述。根据您的第一条评论,我已用最新更改更新了问题。请您看一下并提出相应的建议。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2017-12-21
    • 1970-01-01
    • 2016-10-09
    • 2016-07-28
    相关资源
    最近更新 更多