这是这篇文章的后续内容:
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然后拨打电话。
答案 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