Как открыть новое действие, щелкнув элемент в списке?

Я не могу начать новое действие, щелкнув элемент в моем списке. Я хочу, чтобы onItemClick мог открыть ApkInfoActivity . Фактически, когда я нажимаю, ничего не происходит.

 protected void onItemClick(ListView l, View v, int position, long id, AdapterView parent) { super.onListItemClick(l, v, position, id); final ApplicationInfo app = applist.get(position); PackageInfo packageInfo = (PackageInfo) parent.getItemAtPosition(position); AppDataActivity appData = (AppDataActivity) getApplicationContext(); appData.setPackageInfo(packageInfo); Intent appInfo = new Intent(getApplicationContext(), ApkInfoActivity.class); startActivity(appInfo); } 

Я не могу найти проблему. Как я могу решить?

EDIT с логарифмом:

 10-29 17:14:07.710: E/AndroidRuntime(3535): FATAL EXCEPTION: main 10-29 17:14:07.710: E/AndroidRuntime(3535): java.lang.ClassCastException: android.content.pm.ApplicationInfo cannot be cast to android.content.pm.PackageInfo 10-29 17:14:07.710: E/AndroidRuntime(3535): at com.dd.application.MainActivity.onItemClick(MainActivity.java:369) 10-29 17:14:07.710: E/AndroidRuntime(3535): at android.widget.AdapterView.performItemClick(AdapterView.java:297) 10-29 17:14:07.710: E/AndroidRuntime(3535): at android.widget.AbsListView.performItemClick(AbsListView.java:1149) 10-29 17:14:07.710: E/AndroidRuntime(3535): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2939) 10-29 17:14:07.710: E/AndroidRuntime(3535): at android.widget.AbsListView$2.run(AbsListView.java:3622) 10-29 17:14:07.710: E/AndroidRuntime(3535): at android.os.Handler.handleCallback(Handler.java:730) 10-29 17:14:07.710: E/AndroidRuntime(3535): at android.os.Handler.dispatchMessage(Handler.java:92) 10-29 17:14:07.710: E/AndroidRuntime(3535): at android.os.Looper.loop(Looper.java:137) 10-29 17:14:07.710: E/AndroidRuntime(3535): at android.app.ActivityThread.main(ActivityThread.java:5323) 10-29 17:14:07.710: E/AndroidRuntime(3535): at java.lang.reflect.Method.invokeNative(Native Method) 10-29 17:14:07.710: E/AndroidRuntime(3535): at java.lang.reflect.Method.invoke(Method.java:525) 10-29 17:14:07.710: E/AndroidRuntime(3535): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:743) 10-29 17:14:07.710: E/AndroidRuntime(3535): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:559) 10-29 17:14:07.710: E/AndroidRuntime(3535): at dalvik.system.NativeStart.main(Native Method) 

    Используйте это для выполнения своей работы

      list.setOnItemClickListener(new AdapterView.onItemClickListener() { @Override public void onItemClick(AdapterView adapter, View view, int position, long arg) { Intent appInfo = new Intent(YourActivity.this, ApkInfoActivity.class); startActivity(appInfo); } }); 
     public class MenuYangu extends ListActivity { String classes[] = { "Quiz Trivia", "Sign A New User", "Friend List", "Download A File", "Upload A File", "Select Pdf files", "Memory Game", "Dzidza Maths", "Write Exam" }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter(Menuone.this, android.R.layout.simple_list_item_1, classes)); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); if (position == 0) { Intent intent = new Intent(this, QuizActivity.class); startActivity(intent); } else if (position == 1) { Intent intent = new Intent(this, SignUp.class); startActivity(intent); } else if (position == 2) { Intent intent = new Intent(this, FriendList.class); startActivity(intent); } } } } 

    Вам нужно использовать Intent, вы также можете передать данные элемента clickview listview в свою новую деятельность.

     String classes[] = { "Quiz Trivia", "Sign A New User", "Friend List", "Download A File", "Upload A File", "Select Pdf files", "Memory Game", "Dzidza Maths", "Write Exam" }; listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { Intent intent = new Intent(getApplicationContext(),ApkInfoActivity.class); intent.putExtra("name",classes[i]); startActivity(intent); } }); } 

    Вывод:

    ListView Open Another Activity OnItemClick

    Здесь вы можете найти весь учебник

    Использовать это:

    Intent appInfo = new Intent(CurrentActivity.this, ApkInfoActivity.class); startActivity(appInfo);

    Попробуйте изменить видимость с protected на public для своего заголовка метода.

    редактировать

    Теперь, когда я смотрю на это, ваш заголовок метода на самом деле ошибочен. Это должно быть следующее:

     public abstract void onItemClick (AdapterView parent, View view, int position, long id) 

    Переменные должны быть в том же порядке, что и в интерфейсе, который они реализуют.

    например, если u хочет открыть действие, основанное на текстовом клике в listview, т. е. если «abcd» – это опция, щелкнутая по списку, и вы хотите открыть действие с тем же именем «abcd», а затем выполните это. ,

     public void onItemClick(AdapterView parent, View view, int position, long id) { String temp=yourarray[position]; try{ Class myclass=Class.forName("yourpackagename."+temp); Intent in=new Intent(this,myclass); startActivity(in); }catch(Exception e){ } } 

    Даю объяснение моему ответу. Я предполагаю, что вы настроили свой список в порядке, как в вашем опубликованном коде. Я рассмотрю только эту часть вашего кода: super.onListItemClick (l, v, position, id); Я этого не делаю. В случае примера я дал:

     lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView adapter, View view, int position, long arg) { if(position==0){ Intent appInfo = new Intent(SwahiliService.this, DisplayActivity.class); startActivity(appInfo); } if(position==1){ Intent english=new Intent(SwahiliService.this,EnglishService.class); startActivity(english); } if(position==2){ Toast.makeText(getApplicationContext(),"You have selected pst3", Toast.LENGTH_LONG).show(); } 

    Я просто устанавливаю листер в свой список, который я назвал lv, мой адаптер (который является владельцем моих элементов списка) устанавливает три переменные: вид, int для позиции и длинный аргумент :, я ссылаюсь на элемент, выбранный на listview по своей позиции, которая, как обычно, начинается с 0 (хотя вы можете создать экземпляр, чтобы начать с любого другого номера, как вы хотите, e int position = 1, начинает отсчет элемента в 1). Отсюда вы можете использовать любую структуру управления для запуска активности по щелчку элемента, в моем случае я использовал цикл for, поскольку я предположил, что мой список имеет только три элемента, для более крупных элементов списка вы можете использовать for-loop. Обратите внимание, как я начинаю свою новую деятельность, сначала ссылаясь на текущую деятельность следующим образом (SwahiliService.this), из которой можно безопасно заменить (это только ключевое слово), а затем следует за действиями, которые я хочу начать. Надеюсь, теперь это более сложное.

    // Добавить ArrayList и ArrayAdapter:

      final ArrayList listItems = new ArrayList(); listItems.add("image_one"); listItems.add("image_two"); listItems.add("image_three"); ArrayAdapter myArrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listItems); myListView.setAdapter(myArrayAdapter); 

    // Добавить ArrayList classов :

      final ArrayList intents = new ArrayList(); intents.add(image_one.class); intents.add(image_two.class); intents.add(image_three.class); 

    // Щелкните элемент списка, чтобы открыть class из classа ArrayList :

      myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Intent listIntent = new Intent(getApplicationContext(), intents.get(position)); startActivity(listIntent); } }); 

    СМОТРИТЕ ИЗОБРАЖЕНИЕ НАЗВАНИЙ КЛАССА ЗДЕСЬ

    Добавьте setOnItemclickListener () для вашего списка.

      lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView adapter, View view, int position, long arg) { if(position==0){ Intent appInfo = new Intent(SwahiliService.this, DisplayActivity.class); startActivity(appInfo); } if(position==1){ Intent english=new Intent(SwahiliService.this,EnglishService.class); startActivity(english); } if(position==2){ Toast.makeText(getApplicationContext(),"You have selected pst3", Toast.LENGTH_LONG).show(); } }}); 
    Давайте будем гением компьютера.