当前位置: 首页 > 面试题库 >

使用上下文从自定义视图中完成活动

海信鸥
2023-03-14
问题内容

这是我的代码:

    private void makeDialog2() {
    AlertDialog.Builder about = new AlertDialog.Builder(getContext());
    about.setTitle("You Won!");

    about.setPositiveButton("Play Again",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    Intent playIntent2 = new Intent(getContext(),
                            PracticePlayActivity.class);
                    playIntent2.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                    getContext().startActivity(playIntent2);
                    ((Activity) getContext()).finish();
                }
            });

    about.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface arg1, int arg2) {
            Intent playIntent = new Intent(getContext(),
                    PlayChooserActivity.class);
            playIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            getContext().startActivity(playIntent);
            ((Activity) getContext()).finish();
        }
    });

    about.show();
}

html" target="_blank">用户输掉游戏并想重试时,将提示此代码。但是,当我按重试超过4次时,应用程序崩溃。我怀疑是内存泄漏。在logcat中进行了一些测试之后,我设法发现该活动在重试后仍在运行。

我的计划是用两件事来解决这个问题。回收我的可绘制对象并结束第一个活动。但是,即使我打完电话,第一个活动也没有关闭。有什么帮助吗?(到目前为止,在代码的其他部分使用getContext()仍然有效。

编辑:通过结束活动会自动销毁变量吗?还是我仍然需要从Android内存中清除位图?任何想法,我该怎么做?


问题答案:

如果makeDialog2()Activity尝试中使用thisYourActivityName.this代替声明了if
getContext()。如果不是,则尝试Context使用thisYourActivityName.this从调用方法的位置将用作参数传递给方法。

通过结束活动,它会自动销毁变量吗?

完成后会Activity破坏它和所有相关资源。如果Activity稍后启动新实例,它将重新创建其所有资源。除非您使用某种静态变量,否则只要您的应用程序正在运行,它们就将保持“活动”状态。

从中调用此方法的地方实际上是surfaceview,因此我给它的任何参数基本上仍然是getContext()。有没有办法解决?我不明白为什么((Activity)getContext())。finish();
没用

查看有关Activity-class的文档。

如您所见,它Context是-的超类,Activity意味着每个Activity都是a,Context但并非每个Context都是an
Activity。换句话说((Activity) getContext()).finish();可能会导致ClassCastException

Context实际上可以做的就是验证Activity是否像这样进行检查:

if( getContext() instanceof Activity )
   Log.e( "TAG", "getContext() returns an Activity!" );

在致电之前添加该权限,finish()并检查LogCat是否同意其为Activity



 类似资料:
  • 我试图用RobolectRic2.1.1运行单元测试,但我无法让它膨胀自定义布局(例如,ViewPagerIndicator类)。假设这是我的布局: 其结果是: 我的最后一招是尝试使用影子类: 并使用。这再次导致 你们能给我指出正确的方向吗?我没主意了。多谢了。

  • 我创建了一个类myTextView,当我尝试为同一个类创建对象时,它扩展了TextView:动态工作:myTextView mytv=new myTextView(this.MainActivity);它起作用了。但myTextView mtv=(myTextView)findViewById(R.id.mytV); 它会出错。请参阅Log Cat输出。即使我将xml中的标签从TextView更改

  • 英文原文:http://emberjs.com/guides/views/customizing-a-views-element 视图在页面上表现为一个单一的DOM元素。通过修改tagName属性,可以改变视图生成的元素的类型。 1 2 3 App.MyView = Ember.View.extend({ tagName: 'span' }); 另外,还可以通过设置一个字符串数组到clas

  • 问题内容: 如何通过“静态”方面和“动态”方面自定义的完成?静态方面是因为某些条目是已知的,并在构造时使用添加到了组合框文本中。动态方面是因为我还需要通过一些回调函数来完成,也就是说,一旦键入了几个字符,即在创建窗口小部件之后 动态地 完成。 我的应用程序使用的是Boehm的GC(当然不包括GTK对象),例如Guile或SCM或Bigloo。它可以看作是一种实验 性的持久性 动态类型的编程语言实现

  • 我目前正在为大学开发一个裸体游戏应用程序。在应用程序的商店活动中,我创建了一个自定义列表视图,以显示商店中的商品。每个按钮都有不同的价格等,所以按钮都应该完成不同的任务。以下是通过getView()方法中的switch语句完成的。然而,这些语句中使用的变量是商店活动所必需的,我只是想知道是否有人可以让我知道如何在自定义适配器中使用这些变量。任何帮助都会很好,我对这方面还不太熟悉。

  • 这里有一个项目,我需要在WPF应用程序中自定义上下文菜单,其中将在所有MenuItems的底部放置一个按钮。 但是,如果我要通过XAML添加按钮,它将作为集合中的另一项出现在上下文菜单中,鼠标移过高亮显示将作用于它。 我希望有一个上下文菜单调优到网格样的样式,这样我就可以自定义样式下的它。 有什么想法可以实现这一点(最好是在XAML中)吗?