¿Cómo abrir una nueva actividad haciendo clic en un elemento de listview?

No puedo iniciar una actividad nueva haciendo clic sobre un elemento de mi listview. Quiero que onItemClick puede abrir la ApkInfoActivity .. En realidad, cuando ApkInfoActivity clic en nada suceden.

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

No puedo encontrar el problema. ¿Cómo puedo resolver?

EDIT con logcat:

 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) 

Use esto para hacer su trabajo

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

Agregue setOnItemclickListener () para su ListView.

Utilizar esta:

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

Trate de cambiar la visibilidad de protected a public para su encabezado de método.

Editar

Ahora que lo miro, su encabezado de método es realmente incorrecto. Debe ser el siguiente:

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

Las variables deben estar en el mismo orden en que están en la interfaz que implementan.

Por ejemplo, si desea abrir una actividad basada en el texto u haga clic en listview, es decir, si "abcd" es la opción que hace clic en el listview y desea abrir la actividad con el mismo nombre "abcd", a continuación, realizar esto. .

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

Dar una explicación a mi respuesta. Asumo que usted ha fijado su listview en orden apenas como en su código fijado. Sólo revisaré esta parte de su código: super.onListItemClick (l, v, position, id); No es necesario. En el caso del ejemplo que di:

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

Estoy poniendo un lister a mi listview que he llamado lv, mi adaptador (que es el titular de mis elementos listview) establece tres variables, una vista, int para la posición y largo para el argumento :, me refiero al elemento seleccionado en Listview por su posición que como de costumbre comienza en 0 (aunque puede instanciarlo para comenzar en cualquier otro número como quiera e, g int position = 1, inicia el conteo de elementos en 1). A partir de aquí, puede utilizar cualquier estructura de control para iniciar la actividad como el elemento pulsado, en mi caso, he utilizado un bucle for desde que asumí mi lista tiene sólo tres elementos, para los elementos de lista más grande, puede utilizar un for-loop. Tenga en cuenta cómo comienzo mi nueva actividad haciendo referencia a la actividad actual de la siguiente manera (SwahiliService.this) de la que se puede reemplazar con seguridad por (esta palabra clave solamente) y luego sigue la actividad que quiero iniciar. Espero que esto sea ahora más elaborado.

  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(); } }}); 
  • Vibrar onclick
  • EditText campo es necesario antes de pasar a otra actividad
  • RecyclerView onItemClicked devolución de llamada
  • Obtener coordenadas haciendo clic en el mapa (openstreetmaps)
  • ¿Cómo puedo borrar el texto de Android TextView?
  • Evitar que ProgressDialog sea rechazado por onClick
  • ¿Cómo puedo abrir un nuevo fragmento de otro fragmento
  • OnClick listener a una imagen ListView - Android
  • SetOnClickListener y setOnLongClickListener llamada en cuestión de botón único
  • Necesita hacer doble clic en EditText para que el oyente de clics responda
  • método no sobrescribe el método de su superclase. Fragmento Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.