Aller au contenu

probleme listview selectionnable


Recommended Posts

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

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

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...