Question

I'm trying to create a table with customized rows. I've created a single_row.xml file whith 2 textviews + an ImageView. Also I've added some .png's in a drawable folder.

The code results in an error which I can't figure out. Does somebody have any idea about the error (or even about what is wrong in the code)?

package com.example.listviewwitchcustomimage;

import android.R.drawable;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;


public class MainActivity extends Activity {

    ListView lv;   
    String[] titles;
    String[] descriptions;
    int MyImages[] = {R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,
            R.drawable.f,R.drawable.g,R.drawable.h,R.drawable.j};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Resources res = getResources();
        titles = res.getStringArray(R.array.title);
        descriptions = res.getStringArray(R.array.description);
        lv = (ListView) findViewById(R.id.listView);

        MyCustomAdapter adapter= new MyCustomAdapter(this, titles, MyImages, descriptions);
        lv.setAdapter(adapter);



    }

}


//Maak eigen Adapter
class MyCustomAdapter extends ArrayAdapter<String>{

    Context context;
    int[] images;
    String[] MyTitles;
    String[] MyDescriptions;

    //constructor for ArrayAdapter
    MyCustomAdapter(Context c,String[] titles,int imgs[],String[] descs){
        super(c,R.layout.single_row,R.id.textView1,titles);
        this.context = c; 
        this.images= imgs;
        this.MyTitles = titles;
        this.MyDescriptions=descs;
    }

    @Override
    //At runtime moet de single_row gemaakt worden. Dat gebeurt in de getView
    public View getView(int position, View convertView, ViewGroup parent) {

        //Als er nog geen row gemaakt is-> converView = null. Als er al een row bestaat converView!=null
        View row = convertView;
        if(row==null){


            //Convert XML in JAVA object
            LayoutInflater inflator=(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);

            //Store java object of row in Variable.
            //row verwijst naar de root van single_row -> <RelativeLayout>
             row =inflator.inflate(R.layout.single_row,parent,false);

        }



        //middels row kan je dus de child elements bereiken/gebruiken
        //sla referenves op in variabelen 
        ImageView image =(ImageView) row.findViewById(R.id.imageView1);
        TextView title= (TextView) row.findViewById(R.id.textView1);
        TextView description= (TextView) row.findViewById(R.id.textView2);

        //Set content
        image.setImageResource(images[position]);
        title.setText(MyTitles[position]);
        description.setText(position);


        // TODO Auto-generated method stub
        return row;
    }
}

Logcat:

03-26 07:50:20.834: E/Trace(10654): error opening trace file: No such file or directory (2)
03-26 07:50:20.834: D/ActivityThread(10654): setTargetHeapUtilization:0.25
03-26 07:50:20.834: D/ActivityThread(10654): setTargetHeapIdealFree:8388608
03-26 07:50:20.834: D/ActivityThread(10654): setTargetHeapConcurrentStart:2097152
03-26 07:50:21.014: D/AndroidRuntime(10654): Shutting down VM
03-26 07:50:21.014: W/dalvikvm(10654): threadid=1: thread exiting with uncaught exception (group=0x40f3c378)
03-26 07:50:21.044: E/AndroidRuntime(10654): FATAL EXCEPTION: main
03-26 07:50:21.044: E/AndroidRuntime(10654): java.lang.ArrayIndexOutOfBoundsException: length=9; index=9
03-26 07:50:21.044: E/AndroidRuntime(10654):    at com.example.listviewwitchcustomimage.MyCustomAdapter.getView(MainActivity.java:93)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.widget.AbsListView.obtainView(AbsListView.java:2255)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1270)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.widget.ListView.onMeasure(ListView.java:1182)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.View.measure(View.java:15367)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.widget.RelativeLayout.measureChild(RelativeLayout.java:607)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:420)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.View.measure(View.java:15367)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.View.measure(View.java:15367)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:849)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:578)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.View.measure(View.java:15367)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2154)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.View.measure(View.java:15367)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1858)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1106)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1279)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4223)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.Choreographer.doFrame(Choreographer.java:525)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.os.Handler.handleCallback(Handler.java:615)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.os.Looper.loop(Looper.java:213)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at android.app.ActivityThread.main(ActivityThread.java:4787)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at java.lang.reflect.Method.invokeNative(Native Method)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at java.lang.reflect.Method.invoke(Method.java:511)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
03-26 07:50:21.044: E/AndroidRuntime(10654):    at dalvik.system.NativeStart.main(Native Method)

This is the new message. Line 93: image.setImageResource(images[position]);

Was it helpful?

Solution

seems like you have more than 9 strings in the R.array.title resource. it must be the same amount as in images array

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top