Щелчок по элементам в 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"};

Попробуйте назвать классы так, как они выглядят. как 2_

Также пытаюсь изменить свой манифест:

<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} в качестве теста, и ни одна из трех кнопок ничего не сделала. - person bluebl1; 09.11.2012
comment
Я не вижу ничего плохого в java-коде. Можете ли вы дважды проверить название вашего пакета? - person wtsang02; 09.11.2012
comment
Код запускается, и появляется меню, но когда я щелкаю по меню, ничего не происходит. PS класс Scouting действительно работает, потому что он работал до того, как я добавил меню, а я его вообще не менял. - person bluebl1; 09.11.2012
comment
Я почти уверен, что это связано с предупреждением, что Class - это необработанный тип. Ссылки на универсальный тип Class ‹T› должны быть параметризованы. Проблема в том, что я не знаю, что это значит и как «параметризовать» класс. - person bluebl1; 09.11.2012