How do i create a list of Objects in Java

android, java

Solution

Try this.

List<MarkerCustom> myList=new ArrayList<MarkerCustom>();
MarkerCustom entry1=new MarkerCustom(myInt, myString, myBitmap);
MarkerCustom entry2=new MarkerCustom(myInt, myString, myBitmap);

myList.add(entry1);
myList.add(entry2);

Problem

I have a class file called MarkerCustom. MarkerCustom has a constructor that takes three variables of different types. ``` public MarkerCustom(int myInt, String, myString, BitmapData myBitmap) { ``` From my main Main activity i want to load a GLSurface view that will take an ArrayList of every instance of MarkerCustom that i will want to load into the GLSurface along with the data that will be passed into each instance of MarkerCustom's constructor. Lets call the Array List `myMarkers`; i need `myMarkers` to look like this: ``` myMarkers[0] = [1, "hello", bitMapData1] myMarkers[1] = [66, "johnHandy", bitmapData2] ``` i am fairly new to java and its casting ect confuses me a bit having come from AS3 EDIT So following AKhill's answer below i have edited my `GLSurfaceView` to accept an ArrayList as shown below. But the `MarkerCustom` Class needs to be created from each listed in that ArrayList in the constructor in a manner that its is accessible in the `onSurfaceCreate` and the `onDrawFrame` method of the `GLSurfaceView` Please see those methods and the for loops/comments in this class below: ``` public class GLLayer extends GLSurfaceView implements SurfaceHolder.Callback, Camera.PreviewCallback, Renderer { private Context context; ArrayList <MarkerCustom> locationTags; private PhoneOrientation phoneOri; public GLLayer(Context context, int orientation, ArrayList<MarkerCustom> custMarkers) { super(context); locationTags = custMarkers; this.context = context; phoneOri=new PhoneOrientation(context); // sensor manager and interpreter for(int i =0; i<locationTags.size(); i++){ //Need to create a an instance of each MarkerCustom // something like MarkerCustom locationTags[i]; = new MarkerCustom (its params); } this.setEGLConfigChooser(8, 8, 8, 8, 16, 0); this.getHolder().setFormat(PixelFormat.TRANSLUCENT); this.setRenderer(this); phoneOri.start(context, orientation); } @Override public void onDrawFrame(GL10 gl) { gl.glEnable(GL10.GL_TEXTURE_2D); gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); GLU.gluLookAt(gl,0, 0, 0, 0, 0, 0, 0, 0, 0); float floatMat[]=phoneOri.getMatrix(); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadMatrixf(floatMat, 0); for(int i=0;i<loacationTags.size();i++){ gl.glPushMatrix(); //locationTags[i].draw(gl); gl.glLoadMatrixf(floatMat,0); } gl.glPushMatrix(); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { if(height == 0) { height = 1; } float ratio = (float) width / height; gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); GLU.gluPerspective(gl, 35.0f, (float)width / (float)height, 5.0f, 200.0f); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); GLU.gluLookAt(gl, 0, 1.0f, 5.0f, 0, 0, 0, 0, 1.0f, 0); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig arg1) { for(int i=0;i<locationTags.size();i++){ //call each MarkerCustom's loadGLTexture Method //locationTags[i].loadGLTexture(gl, this.context); } gl.glEnable(GL10.GL_TEXTURE_2D); gl.glShadeModel(GL10.GL_SMOOTH); gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); gl.glClearDepthf(1.0f); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glDepthFunc(GL10.GL_LEQUAL); gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_SMOOTH); } @Override public void onPreviewFrame(byte[] data, Camera camera) { } } ``` And Just for reference here is my `MarkerCustom` class ``` public class MarkerCustom { public float xPos; public float yPos; public float zPos; public float yaw; public float pitch; public Bitmap tagImage; private FloatBuffer vertexBuffer; // buffer holding the vertices private float vertices[] = { 0.0f, -10.0f, -10.0f, // V1 - bottom left 0.0f, -10.0f, 10.0f, // V2 - top left 0.0f, 10.0f, -10.0f, // V3 - bottom right 0.0f, 10.0f, 10.0f // V4 - top right }; private FloatBuffer textureBuffer; // buffer holding the texture coordinates private float texture[] = { // Mapping coordinates for the vertices 0.0f, 1.0f, // top left (V2) 0.0f, 0.0f, // bottom left (V1) 1.0f, 1.0f, // top right (V4) 1.0f, 0.0f // bottom right (V3) }; public MarkerCustom(float x, float y, float z, float yawAngle, float pitchAngle, Bitmap bitmap) { xPos = x; yPos = y; zPos = z; yaw = yawAngle; pitch = pitchAngle; tagImage = bitmap; ByteBuffer byteBuffer = ByteBuffer.allocateDirect(vertices.length * 4); byteBuffer.order(ByteOrder.nativeOrder()); vertexBuffer = byteBuffer.asFloatBuffer(); vertexBuffer.put(vertices); vertexBuffer.position(0); byteBuffer = ByteBuffer.allocateDirect(texture.length * 4); byteBuffer.order(ByteOrder.nativeOrder()); textureBuffer = byteBuffer.asFloatBuffer(); textureBuffer.put(texture); textureBuffer.position(0); } /** The texture pointer */ private int[] textures = new int[1]; public void loadGLTexture(GL10 gl, Context context) { // loading texture // Enable blending using premultiplied alpha. gl.glEnable(GL10.GL_BLEND); gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA); // generate one texture pointer gl.glGenTextures(1, textures, 0); // ...and bind it to our array gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); // create nearest filtered texture gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); // Use Android GLUtils to specify a two-dimensional texture image from our bitmap GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, tagImage, 0); // Clean up tagImage.recycle(); } public void draw(GL10 gl) { // bind the previously generated texture gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); // Point to our buffers gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); // Set the face rotation gl.glFrontFace(GL10.GL_CW); // Point to our vertex buffer gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer); // Draw the vertices as triangle strip gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3); //Disable the client state before leaving gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); } } ```

Original source