Щракването върху елементи в ListAdapter не прави нищо

Опитвам се да направя първия си адаптер за списък с android и той излиза със списъка, но когато щракна върху елементите, нищо не се случва. Единственото ми предположение е коментарът, който имам след реда, който дефинира Class cvar.

package scouting.form;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class Menu extends ListActivity{

    String classes[] = {"SCOUTING","LOGIN","MAIN"};

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(Menu.this,android.R.layout.simple_list_item_1,classes));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position,long id)
    {
        super.onListItemClick(l, v, position, id);
        String cheese= "com.cody.graham."+classes[position];
        try{
            Class cvar=Class.forName(cheese);     //Eclipse has a warning on this line "Class is a raw type. References to generic type Class<T> should be parameterized". I don't really know what that means.
            Intent intention=new Intent(Menu.this,cvar);
            startActivity(intention);
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
    }
}

Редактиране:

Част от AndroidManifest:

<activity android:name=".splash_screen" android:label="@string/title_activity_splash" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name=".Login" android:label="@string/title_activity_login" android:exported="false">
    <intent-filter>
        <action android:name="com.cody.graham.LOGIN" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

<activity android:name=".Scouting" android:label="@string/title_activity_scouting" android:exported="false">
    <intent-filter>
        <action android:name="com.cody.graham.SCOUTING" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

person bluebl1    schedule 08.11.2012    source източник
comment
Logcat изход? Предполагам, че класовете не могат да бъдат намерени с тези имена. Знаете ли, че можете да създадете списък с действителните класове?   -  person dmon    schedule 09.11.2012


Отговори (2)


Първо, премахнете секциите <intent-filter> от вашия манифест както за .Scouting, така и за .Login (оставете този за .splash_screen). Освен ако не е необходимо някой от вашите Activity класове да бъде стартиран от (външни) приложения на трети страни, не е необходимо да декларирате базирано на действие <intent-filter> секции - също не е добра практика.

Второ, направете както предлага wtsang02 и променете низовия масив на класовете на...

String classes[] = {"Scouting","Login","splash_screen"};

Също така, ако приемем, че другите Activity класове (като Scouting и т.н.) са в същия пакет като Menu, променете този ред...

String cheese= "com.cody.graham."+classes[position];

to be...

String cheese= "scouting.form." +classes[position];

...и за да се отървете от предупреждението за затъмнение, този ред...

Class cvar=Class.forName(cheese);

...to...

Class<?> cvar=Class.forName(cheese);
person Squonk    schedule 09.11.2012
comment
Все още не прави нищо :( - person bluebl1; 09.11.2012
comment
@bluebl1 : Редактирах точно преди да публикуваш коментара си. Проверете отново моите предложения за промяна на кода и се уверете, че използвате правилното име на пакета за низа cheese. - person Squonk; 09.11.2012
comment
Чудех се как можете да премахнете филтъра за намерения и все още да използвате com.cody.graham. Но все още имам филтъра за намерения, защото го използвам малко. - person bluebl1; 09.11.2012
comment
@bluebl1 : За да използвате действията <intent-filter>, създавате Intent по различен начин и не посочвате частите Context или Class<?>. Вместо това просто предавате низ към конструктора Intent, за да укажете действието. Пример - Intent intention=new Intent("com.cody.graham.SCOUTING"); ще работи, но това се нарича имплицитно намерение. Когато се указва параметърът Class<?>, който да се използва, това е изрично намерение. Низовете за действия в секцията <intent-filter> могат да бъдат всякакви - Class<?> за изрични намерения обаче трябва да има напълно квалифицирано име на пакет и т.н. - person Squonk; 09.11.2012

  String classes[] = {"SCOUTING","LOGIN","MAIN"};

Опитайте да наименувате класовете така, както изглежда. като Scouting

Също така се опитвате да промените манифеста си:

<activity android:name=".Scouting" />
Това е, от което се нуждаете само в този случай.

Eclipse има предупреждение на този ред „Класът е необработен тип. Препратките към генеричен тип Клас трябва да бъдат параметризирани“. Това е предупреждение, в този случай няма да ви даде грешка. Това, което означава, е Class, T е тип клас на това, което получавате. пр.:

Class<? extends Activity> cvar=Class.forName(cheese);

За повече информация: връзка

person wtsang02    schedule 08.11.2012
comment
Като допълнителна бележка, всички неща в Java са чувствителни към малки и големи букви. Търсенето на клас не е изключение - лесно можете да имате един клас с име Scouting и напълно различен с име SCouTing - person JRaymond; 09.11.2012
comment
Знам. Преди да получа тази публикация, тествах с това, защото имам класа с име Scouting, манифестът задава името му на com.cody.graham.SCOUTING и някъде другаде използвам scouting. Направих списъка {SCOUTING,Scouting,scouting} като тест и нито един от 3-те бутона не направи нищо. - person bluebl1; 09.11.2012
comment
Не виждам нищо лошо в java кода. Можете ли да проверите отново името на пакета си? - person wtsang02; 09.11.2012
comment
Кодът се изпълнява и менюто се появява, но когато щракна върху менюто, нищо не се случва. PS Скаутинг класът работи, защото работеше преди да добавя менюто и изобщо не съм го променил. - person bluebl1; 09.11.2012
comment
Почти съм сигурен, че това е свързано с предупреждението Класът е необработен тип. Препратките към генеричен тип Class‹T› трябва да бъдат параметризирани. Проблемът е, че не знам какво означава това или как да „параметризирам“ класа. - person bluebl1; 09.11.2012