在View上下文中获取Activity对象

时间:2010-10-10 18:27:10

标签: android android-activity android-context

这是这篇文章的后续内容:

findViewById in a subclassed SurfaceView throwing RuntimeException

根据Romain Guy的反馈(我很快会接受,因为它是一个解决方案),我想从View中获取调用Activity,以便我可以使用它来获取所需的TextView资源。 / p>

我没有在View中看到任何返回Activity的方法。这样做的正确方法是什么?或者,在另一个View上下文中使用TextViews是否有更好的选择。

基本上,我在onCreate()中调用setContentView(R.layout.xxx)(像往常一样),所以我真的没有办法传递对其他TextView的引用,除非我在setContentView之后笨拙地检索View然后拨打电话。

2 个答案:

答案 0 :(得分:7)

活动是一种上下文,但不保证视图使用的上下文始终是活动。从onCreate()获取视图以进行一些设置是完全有效的,并且通常是如何编写Android应用程序的。你可以做这样的事情,例如:

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

逻辑不应该出现在你的观点中。

答案 1 :(得分:4)

如果您已经知道View所在的Activity类,即MyActivity,则可以在View及其侦听器中使用静态成员 MyActivity.this ,如下例所示:

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教程中找到了:

http://developer.android.com/guide/topics/ui/dialogs.html

它为我创造了奇迹。

PJ_Finnegan