Android 在视图上下文中获取活动对象

Android 在视图上下文中获取活动对象,android,android-activity,android-context,Android,Android Activity,Android Context,以下是本帖的后续内容: 根据Romain Guy的反馈(我很快会接受,因为这是一个解决方案),我希望从视图中获取调用活动,以便使用它获取所需的TextView资源 我没有看到任何返回活动的方法。正确的方法是什么?或者在另一个视图上下文中使用文本视图是否有更好的选择 基本上,我是在onCreate()中调用setContentView(R.layout.xxx)(与往常一样),因此我实际上没有办法传递对其他文本视图的引用,除非我在setContentView之后笨拙地检索视图,然后对其进行调用。

以下是本帖的后续内容:

根据Romain Guy的反馈(我很快会接受,因为这是一个解决方案),我希望从视图中获取调用活动,以便使用它获取所需的TextView资源

我没有看到任何返回活动的方法。正确的方法是什么?或者在另一个视图上下文中使用文本视图是否有更好的选择


基本上,我是在onCreate()中调用setContentView(R.layout.xxx)(与往常一样),因此我实际上没有办法传递对其他文本视图的引用,除非我在setContentView之后笨拙地检索视图,然后对其进行调用。

活动是一个上下文,但不能保证视图使用的上下文始终是一个活动。从onCreate()获取视图来进行一些设置是完全有效的,这也是Android应用程序通常的编写方式。您可以这样做,例如:

setContentView(...);
MySurfaceView v = findViewById(R.id.theusrface);
TextView t = findViewById(R.id.thecontent);
v.setContent(v);

逻辑不应出现在视图中。

如果您已经知道视图所处的活动类,即MyActivity,则可以使用静态成员MyActivity。这可以从视图及其侦听器内部执行,如下例所示:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
       .setCancelable(false)
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                MyActivity.this.finish();
           }
       })
       .setNegativeButton("No", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
           }
       });
AlertDialog alert = builder.create();
我在本Android教程中发现:

它为我创造了奇迹


PJ_Finnegan

谢谢。这样做“感觉”很尴尬,但我想这是Android方式(tm)。我可能会这样做:MySurfaceView v=findviewbyd(R.id.something);setContentView(v);v、 setContent(findviewbyd(R.id.content));在调用setContentView()之前,不能执行findViewById()。完全正确。多么奇怪的安排啊,必须识别一个对象,将它设置在另一个对象上,然后要求另一个对象再次获取它的副本,并且不允许视图中存在从属视图。我想我在这里面临的是,Android API与我设计的任何东西都有根本的不同。无论如何,谢谢你。代码正在按预期工作。您所说的“再次向另一个对象索要代码副本”是什么意思?你绝对不需要这么做。视图(以及视图组)可以包含子视图,这没有问题。恰好SurfaceView不是一个视图组。@cYrus视图可以使用服务上下文创建,我很确定它们可以使用应用程序上下文创建。此外,如果您使用的是Square's Mortar之类的东西,那么您的上下文可能完全是另一种东西(一种包装另一个普通Android上下文的上下文)。这种方法的主要问题是,在Java中,您应该编写独立的类,这是一个好主意的原因有很多。如果在视图中引用外部类的静态成员,则它不是独立的。