web-dev-qa-db-fra.com

android.app.Application ne peut pas être converti en Android.app.Activity

J'essaie de changer un LinearLayout d'une autre classe, mais quand je lance ce code:

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);
}

je reçois un ClassCastException

le contexte est l'activité principale qui étend Activity passé avec un getApplicationContext ();

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

Vous passez l'application Context pas le Activity Context avec

getApplicationContext();

Où que vous passiez, passez this ou ActivityName.this au lieu.

Puisque vous essayez de convertir le Context vous passez (application pas activité comme vous le pensiez) en un Activity avec

(Activity)

vous obtenez cette exception car vous ne pouvez pas convertir l'application en Activity, car l'application n'est pas une sous-classe de Activity.

94
codeMagic

Dans mon cas, lorsque je suis dans une activité allant de AppCompatActivity, cela ne fonctionnait pas(Activity) getApplicationContext (), Je viens de mettre this à sa place.

0
Gerrard