Gå til innhold

(Android) Starte en ny aktivitet basert på String


Anbefalte innlegg

Hepp. Fant ikke noe bedre sted å poste dette, men siden Android kjører Java er det vel relativt godt plassert. I tillegg kan det være nyttig å finne ut av generelt i Java.

 

Så, her er utgangspunktet. Et program har en masse klasser for å gjøre ting. På et punkt skal brukeren velge hvilken funksjon han skal bruke, og man må begynne å kjøre ting inne i denne klassen.

 

I android er alt basert på aktivititerer, som kjøres slik:

Intent intent = new Intent(this, Klassenavn.class);
startActivity(intent);

 

Nøkkelen her er "Klassenavn.class". Jeg vil gjerne bytte ut Klassenavn med en variabel (jeg har en metode som henter klassenavnet fra en String). Dersom jeg får til dette, trenger jeg ikke å bruke endeløse if/else-trær for å avgjøre hvilke funksjoner som skal kjøre, men heller bare be programmet om å starte en aktivitet basert på klassenavnet som står i Stringen.

 

Hittil har jeg forsøkt litt med ForName-metoden som står nevnt her: http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html

 

Men jeg får ClassNotFoundException selv om jeg eksplisitt nevner en klasse jeg vet eksisterer i programmet mitt. Det er mulig jeg misforstår noe, men litt hjelp hadde vært kjekt. :)

Lenke til kommentar
Videoannonse
Annonse

Test dette:

final String className = Klassenavn.class.getName();

final Class clazz = Class.forName(className);

Intent intent = new Intent(this, clazz);

 

Hvis dette virker har du sleivet på noe alle pakkenavn eller noe.

Lenke til kommentar

Problemet er jo at jeg ikke vet klassenavnet i utgangspunktet. Det er bare en streng som er identisk med navnet til .java-filen.

 

Men sånn sett burde vel final Class clazz = Class.forName(getmetodesomgirmegstringen); funke?

 

EDIT: Forsøkte både med med metoden over og metoden du nevnte med en klasse jeg kjenner navnet til. Får fortsatt ClassNotFoundException.

Endret av Heilage
Lenke til kommentar

Det burde funke, men husk at du må ha med hele pakkenavnet f.eks "min.pakke.KlasseSomSkalLastes"

 

(I tillegg må klassen være synlig for classloaderen som brukes. Hvis ikke må du lage en ny classloader, legge til .class filen i pathen der og bruke den for å laste klassen)

Endret av Kiff
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...