¿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?
- Forma personalizada real del botón
- Iniciación de inicio desde onclicklistener
- ¿Cómo funciona finish () en el evento OnClick?
- OnClickListener del primer elemento de GridView no funciona
- Android: Configurar onClickListener en una parte del texto de un TextView - Problema
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)
- OnItemClickListener y OnClickListener no funcionan para ListView
- DialogInterface vs Ver OnClickListeners
- Excepción de puntero nulo en .setOnClickListener
- "Presione y mantenga presionado" en Android necesita cambiar estados (selector XML personalizado) usando onTouchListener
- Capturar LinearLayout eventos onClick con ImageButton dentro de él
- ¿Cómo agregar tiempo al temporizador de cuenta atrás?
- Cómo utilizar el método onClickListener de Button en un ListView
- Java - Android - Split Activity / Class en varios archivos para una mejor organización (solución)
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(); } }});
- Enviar SMS con Genymotion
- Java.lang.IllegalStateException: ArrayAdapter requiere que el identificador de recurso sea un TextView