nokachouik Posté(e) 28 juillet 2010 Share Posté(e) 28 juillet 2010 Bonjour, Je suis en train de developper une application. elle fonctionne tres bien avec android 1.5 mais pour diverse rison j'ai besoin de la passer en 2.1 et là, (forcement) ca marche plus. J'ai un probleme avec ma page princiaple. Cette page affiche une list avec une image et un texte sur chaque ligne. Elle s'affiche correctement, le probleme est que dés que je clique sur une ligne, mon programme se ferme. Je ne vois pas ou est l'erreur, pouvez vous m'aider. Voici mon code Main.java public class Main extends ListActivity { String[] categories = {"Contacts", "Sms", "Emails", "Images", "Musiques", "Videos", "Planning"}; TextView selection; ListView lv; private ArrayList ListCats = null; private IglooAdapter i_adapter; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list1); ListCats = new ArrayList(); getMenu(); this.i_adapter = new MainAdapter(this, R.layout.row_menu, ListCats); OnItemClickListener listlistener = new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View arg1, int position, long arg3) { Toast.makeText(getApplicationContext(), "peitit toast test!", Toast.LENGTH_SHORT).show(); } }; lv.setOnItemClickListener(listlistener); lv.setAdapter(this.i_adapter); } private void getMenu(){ try{ ListCats = new ArrayList(); ListCats.add("Contacts"); ListCats.add("Sms"); ListCats.add("Emails"); ListCats.add("Images"); ListCats.add("Musiques"); ListCats.add("Videos"); ListCats.add("Planning"); Thread.sleep(2000); Log.i("ARRAY", ""+ ListCats.size()); } catch (Exception e) { Log.e("BACKGROUND_PROC", e.getMessage()); } } } MainAdapter.java public class MainAdapter extends ArrayAdapter { private ArrayList items; private static int count = 0; private ArrayList listImage; String[] categories = {"Contacts", "Sms", "Emails", "Images", "Musiques", "Videos", "Planning"}; public MainAdapter(Context context, int textViewResourceId, ArrayList items) { super(context, textViewResourceId, items); this.items = items; listImage = new ArrayList(); recupImageView(); } public void recupImageView() { listImage.add(getContext().getResources().getDrawable(R.drawable.contact_icon4)); listImage.add(getContext().getResources().getDrawable(R.drawable.sms_icon2)); listImage.add(getContext().getResources().getDrawable(R.drawable.email_icon)); listImage.add(getContext().getResources().getDrawable(R.drawable.image_icon3)); listImage.add(getContext().getResources().getDrawable(R.drawable.music_icon3)); listImage.add(getContext().getResources().getDrawable(R.drawable.video_icon4)); listImage.add(getContext().getResources().getDrawable(R.drawable.planning_icon2)); } 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_menu, null); } String o = items.get(position); if (o != null) { TextView txt = (TextView) v.findViewById(R.id.centertext); ImageView im = (ImageView)v.findViewById(R.id.icon); if (txt != null) { txt.setText(categories[count]); } if (im != null) { im.setImageDrawable(listImage.get(count)); } count++; } return v; } } list1.xml <?xml version="1.0" encoding="utf-8"?> android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:choiceMode="multipleChoice" /> android:id="@+id/android:empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text=""/> row_menu.xml <?xml version="1.0" encoding="utf-8"?> android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip"> android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginRight="6dip"/> android:orientation="vertical" android:layout_width="0dip" android:layout_weight="1" android:layout_height="fill_parent"> android:layout_width="wrap_content" android:layout_height="fill_parent" android:id="@+id/centertext" android:textSize="20px" android:paddingTop="10dip" android:paddingLeft="15dip" /> J'espere que vous pourrez m'aider, je pete un cable merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Puni Posté(e) 29 juillet 2010 Share Posté(e) 29 juillet 2010 Si tu veux une aide rapide, je te suggère de nous donner également le LogCat de ton application juste après un crash :-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
nokachouik Posté(e) 29 juillet 2010 Auteur Share Posté(e) 29 juillet 2010 voila mon log. Je pige pas grand chose Erreur 07-29 11:24:27.325: ERROR/AndroidRuntime(240): Uncaught handler: thread main exiting due to uncaught exception 07-29 11:24:27.345: ERROR/AndroidRuntime(240): java.lang.ArrayIndexOutOfBoundsException 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at org.eip.igloo.IglooAdapter.getView(IglooAdapter.java:60) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.AbsListView.obtainView(AbsListView.java:1256) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.ListView.makeAndAddView(ListView.java:1668) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.ListView.fillSpecific(ListView.java:1212) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.ListView.layoutChildren(ListView.java:1499) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.AbsListView.onLayout(AbsListView.java:1113) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.view.View.layout(View.java:6830) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.LinearLayout.onLayout(LinearLayout.java:918) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.view.View.layout(View.java:6830) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.view.View.layout(View.java:6830) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.LinearLayout.onLayout(LinearLayout.java:918) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.view.View.layout(View.java:6830) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.view.View.layout(View.java:6830) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.view.ViewRoot.performTraversals(ViewRoot.java:996) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.os.Handler.dispatchMessage(Handler.java:99) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.os.Looper.loop(Looper.java:123) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at android.app.ActivityThread.main(ActivityThread.java:4363) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at java.lang.reflect.Method.invokeNative(Native Method) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at java.lang.reflect.Method.invoke(Method.java:521) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 07-29 11:24:27.345: ERROR/AndroidRuntime(240): at dalvik.system.NativeStart.main(Native Method) 07-29 11:24:27.375: ERROR/dalvikvm(240): Unable to open stack trace file '/data/anr/traces.txt': Permission denied Lien vers le commentaire Partager sur d’autres sites More sharing options...
akex Posté(e) 29 juillet 2010 Share Posté(e) 29 juillet 2010 java.lang.ArrayIndexOutOfBoundsException Le problème semble se situer dans le getView et non au moment du click (en tout cas d'après le logcat). Utilise le debugger (avec points d'arret) pour déterminer quelle ligne pose problème. Tu places un point d'arrêt au début de la méthode getView et tu fais du pas à pas ... En tout cas, ce qu'on voit c'est que tu vas faire planter ton programme quoiqu'il arrive. Je m'explique. Tu incrémentes count régulièrement (lorsque tu recycle ta vue). D'ailleurs tu n'as pas besoin du count (qui risque de dépasser irrémédiablement l'index max du array). Essaye plutôt ça. dans ton constructeur défini mInflater comme suit : mInflater = LayoutInflater.from(context); public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.row_menu, null); } TextView txt = (TextView) convertView.findViewById(R.id.centertext); ImageView im = (ImageView) convertVirw.findViewById(R.id.icon); txt.setText(categories[position]); im.setImageDrawable(listImage[position]); return convertView; } Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nanis Posté(e) 29 juillet 2010 Share Posté(e) 29 juillet 2010 C'est surement une question con, mais as tu bien changer la version du sdk dans le manifest ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
akex Posté(e) 29 juillet 2010 Share Posté(e) 29 juillet 2010 Le problème, pour être honnête, c'est qu'il y a pas mal de code inutile voire tueur d'application ... Mais bon, faut bien essayer :). Je te conseille de faire un tour sur les api sample proposé par Google. Tu auras des exemples concrets de ce qu'il faut (pas) faire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
nokachouik Posté(e) 29 juillet 2010 Auteur Share Posté(e) 29 juillet 2010 Super, ca fonctionne, Merci beaucoup akex, tu m'a sauvé la vie. J'arrive pas a croire que je suis resté aussi longtemps bloqué sur un probleme aussi bete. Comme tu me l'a conseillé, je vais aller faire un tour sur les API sample de google. encore merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.