web-dev-qa-db-ja.com

android.app.ApplicationはAndroid.app.Activityにキャストできません

私は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を取得します

コンテキストは、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)
30
DomeWTF

Activity ContextではなくContextではなくアプリケーションを渡します

getApplicationContext();

渡す場所はどこでも、代わりにthisまたはActivityName.thisを渡します。

Contextをキャストしようとしているので、次のようにActivityに(想定どおりのアクティビティではなくアプリケーション)を渡します。

(Activity)

applicationはActivityのサブクラスではないため、アプリケーションをActivityにキャストできないため、この例外が発生します。

94
codeMagic

私の場合、AppCompatActivityから拡張されたアクティビティにいるとき、それは機能しませんでした(Activity) getApplicationContext ()、私はちょうどその場所に_thisを置いた。

0
Gerrard