什么时候允许将Context转换为Activity?

时间:2011-05-17 14:06:46

标签: android android-layout android-activity alertdialog android-context

在警报Dialog类的showAlret(String message, Context ctx)方法中,我试图在对话框的布局XML中获取对TextView的引用:

TextView tv = (TextView)((MyActivity)ctx).findViewById(R.id.tv_about);

当然不是在调用inflate()之前:

LayoutInflater li = LayoutInflater.from(ctx);
View view = li.inflate(R.layout.aboutdialog, null);

问题是此调用会将tv返回为 null

由于代码编译没有任何警告,我假设这是由于“非法”将Context转换为MyActivity。

我遇到过很多案例,其中将Context to Activity转化为唯一真正有用的东西,为什么在这种情况下这不起作用?

什么时候将Context转换为Activity才有意义?

这方面的“潜规则”是什么?

4 个答案:

答案 0 :(得分:3)

LayoutInflater li = LayoutInflater.from(ctx);
View view = li.inflate(R.layout.aboutdialog, null);
TextView tv = view.findViewById(R.id.tv_about);

我知道你的textview是对话框xml的一部分,所以你需要在对话框视图而不是活动上找到ViewById()。

答案 1 :(得分:1)

不,不,否则你会有异常。 你确定你的Activity在你尝试获取时从xml加载了TextView吗?

答案 2 :(得分:1)

我找到了解决方案。我的错误是我在做:

TextView tv = (TextView)((MyActivity)ctx).findViewById(R.id.tv_about);

而不是:

TextView tv = (TextView)view.findViewById(R.id.tv_about);

答案 3 :(得分:0)

一方面,您可以在活动时将上下文转换为活动。 Context是Activity的基类。

当您的方法在Context对象上不可用时,您只需要转换为Activity。转换只是告诉编译器你确定它是一个Activity的一种方式,因为编译器将会知道你在做什么。