我试图从另一个类更改LinearLayout
,但是当我运行此代码时:
public class IRC extends PircBot {
ArrayList<String> channels;
ArrayList<Integer> userCount;
ArrayList<String> topics;
LinearLayout channelLayout;
Context context;
public IRC(Context ctx) {
this.setName("xxxx");
channels = new ArrayList<String>();
userCount = new ArrayList<Integer>();
topics = new ArrayList<String>();
context = ctx;
channelLayout = (LinearLayout) ((Activity) context).findViewById(R.id.channels);
}
我得到ClassCastException
context是使用getApplicationContext()传递Activity
的主要活动;
logcat的
05-08 17:53:55.102 3736-3799/g.d.allinonechat E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-5357
java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity
at g.d.xxx.IRC.<init>(IRC.java:34)
at g.d.xxx.MainActivity$1.run(MainActivity.java:49)
at java.lang.Thread.run(Thread.java:856)
答案 0 :(得分:90)
您正在传递应用Context
而不是<{1}}
Activity Context
无论您在何处通过,都会通过getApplicationContext();
或this
。
由于您尝试将ActivityName.this
传递给Context
Activity
您收到此异常是因为您无法将应用程序转换为(Activity)
,因为应用程序不是Activity
的子类。
答案 1 :(得分:3)
如果你的项目使用dagger,然后这个错误就会出现 你可以在android manifest中添加这个
<application
...
android: name = ".BaseApplication"
...> ...
答案 2 :(得分:0)
以我为例,当我参加的活动从AppCompatActivity
扩展到(Activity) getApplicationContext ()
无效时,我只是将this
放在了它的位置。
答案 3 :(得分:0)
您收到此错误,因为必需的参数是Activity,并且正在向其传递应用程序。
因此,您可以将应用程序投射到Activity上,例如:(Activity)getApplicationContext();
或者,您可以像这样输入活动:MyActivity.this
答案 4 :(得分:0)
您也可以尝试这个。
override fun registerWith( registry: PluginRegistry) {
GeneratedPluginRegistrant.registerWith(registry as FlutterEngine)
//registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin")
}
我认为这是比创建新类更好的解决方案。
答案 5 :(得分:0)
就我而言,我只是将 android:name=".CustomBaseClass"
放在活动标签内,而不是清单内的应用程序标签,希望对某人有所帮助。
答案 6 :(得分:-2)
对我来说,从android:name=".MainActivity"
中删除<application …
可以解决问题。