3

这是这篇文章的后续:

子类 SurfaceView 中的 findViewById 抛出 RuntimeException

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

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

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

4

2 回答 2

7

一个Activity就是一个Context,但不能保证View使用的Context总是一个Activity。从 onCreate() 获取视图以进行一些设置是完全有效的,并且通常是 Android 应用程序的编写方式。例如,您可以执行以下操作:

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

逻辑不应该出现在您的视图中。

于 2010-10-10T18:53:23.967 回答
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_芬尼根

于 2012-01-02T22:40:55.083 回答