Comment démarrer une intention à partir d'un OnClickListener
Mon Activité Principale extends ListActivity et affiche une Liste. Je suis à l'aide personnalisée Listitems définie dans une classe nommée DefinitionAdapter.
J'ai aussi une autre classe qui implémente OnClickListener.
Dans la classe DefinitionAdapter j'ai mis le OnClickListener à la ListItems:
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
...
v.setOnClickListener(new OnItemClickListener(position) );
return v;
}
Mon custom OnClickListener est censé commencer une autre activité.
public class OnItemClickListener implements OnClickListener extends Activity {
private int position;
public OnItemClickListener(int p) {
position = p;
}
@Override
public void onClick(View v) {
Intent intent = new Intent(this, ShowDefinition.class);
startActivity(intent);
}
}
Je ne suis pas sûr que je suis en train de le faire. J'ai ajouté ma nouvelle activité pour le manifeste, ainsi que l'activité, j'ai étendu à l'auditeur:
<activity android:name="ShowDefinition" android:label="@string/app_name">
</activity>
<activity android:name="OnItemClickListener" android:label="@string/app_name">
</activity>
Néanmoins, si je clique sur un Item de ma Liste, la demande toujours rompt avec une NullPointerException. Je pense que je suis en utilisant l'intention de mal... des Idées?
En ce qui concerne Nikita Beloglazov commentaire:
Qu'elle se casse quand je créer l'Intention:
Intent intent = new Intent(this, ShowDefinition.class);
Voici la stacktrace:
05-23 22:56:46.629: ERROR/AndroidRuntime(258): Uncaught handler: thread main exiting due to uncaught exception
05-23 22:56:46.659: ERROR/AndroidRuntime(258): java.lang.NullPointerException
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:120)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.content.ComponentName.<init>(ComponentName.java:75)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.content.Intent.<init>(Intent.java:2551)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at com.andiandy.juradefinitions.OnItemClickListener.onClick(OnItemClickListener.java:22)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.view.View.performClick(View.java:2364)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.view.View.onTouchEvent(View.java:4179)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.view.View.dispatchTouchEvent(View.java:3709)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.os.Handler.dispatchMessage(Handler.java:99)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.os.Looper.loop(Looper.java:123)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at android.app.ActivityThread.main(ActivityThread.java:4363)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at java.lang.reflect.Method.invokeNative(Native Method)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at java.lang.reflect.Method.invoke(Method.java:521)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-23 22:56:46.659: ERROR/AndroidRuntime(258): at dalvik.system.NativeStart.main(Native Method)
source d'informationauteur twittfort | 2011-05-23
Vous devez vous connecter pour publier un commentaire.
Votre OnItemClickListener ne devrait pas prolonger l'Activité. Au lieu de cela, vous devriez prendre des dispositions pour le OnItemClickListener pour avoir accès à votre ListActivity instance. Une vue qui fait déjà partie de l'activité (comme la ListView) a accès à l'ListActivity exemple par le biais de
getContext()
. Puis de mettre en œuvreonClick
comme ceci:Il y a deux façons de mettre en œuvre un onItemClickListener. Vous n'avez pas besoin de créer une nouvelle classe. Peut-être vous pouvez essayer la solution de facilité pour l'instant 🙂
Votre ListActivity mettre en œuvre AdapterView.OnItemClickListener
Puis dans votre ListActivity du onCreate définir votre onClickListener comme ceci :
Et puis vous pouvez réagir au clic comme ceci :
Qui devrait le faire pour les clics. Si vous avez besoin de savoir quand un élément est sélectionné, vous pouvez regarder dans AdapterView.OnItemSelectedListener
-I_Artist
Votre conception est erronée, votre OnItemClickListener ne devrait pas s'étend de l'Activité et vous devriez vous n pas construire une nouvelle onClickListener à chaque fois.