1

I am trying to make a simple app which has two Activities. The first one is called main activity and it has one button. When I click the button it goes to a second activity called "Leyenda" with a custom ListView.
The app compiles and runs, but when I click on the button in the first Activity to go to the second activity it stops.
Here is the code of both activities and the Android Manifest.

this is the locat error


11-30 10:56:24.432: E/art(2835): Throwing OutOfMemoryError "Failed to allocate a 215737356 byte allocation with 1048576 free bytes and 63MB until OOM"
11-30 10:56:24.434: E/AndroidRuntime(2835): FATAL EXCEPTION: main
11-30 10:56:24.434: E/AndroidRuntime(2835): Process: com.example.guille.listview, PID: 2835
11-30 10:56:24.434: E/AndroidRuntime(2835): android.view.InflateException: Binary XML file line #37: Error inflating class android.widget.ImageView
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.LayoutInflater.createView(LayoutInflater.java:633)
11-30 10:56:24.434: E/AndroidRuntime(2835): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
11-30 10:56:24.434: E/AndroidRuntime(2835): at com.example.guille.listview.Leyenda$ListViewAdapter.getView(Leyenda.java:81)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.AbsListView.obtainView(AbsListView.java:2344)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.ListView.measureHeightOfChildren(ListView.java:1270)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.ListView.onMeasure(ListView.java:1182)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.View.measure(View.java:17430)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.View.measure(View.java:17430)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.View.measure(View.java:17430)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.View.measure(View.java:17430)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.View.measure(View.java:17430)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.View.measure(View.java:17430)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
11-30 10:56:24.434: E/AndroidRuntime(2835): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.View.measure(View.java:17430)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.Choreographer.doCallbacks(Choreographer.java:580)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.Choreographer.doFrame(Choreographer.java:550)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.os.Handler.handleCallback(Handler.java:739)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.os.Handler.dispatchMessage(Handler.java:95)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.os.Looper.loop(Looper.java:135)
11-30 10:56:24.434: E/AndroidRuntime(2835): at android.app.ActivityThread.main(ActivityThread.java:5221)
11-30 10:56:24.434: E/AndroidRuntime(2835): at java.lang.reflect.Method.invoke(Native Method)
11-30 10:56:24.434: E/AndroidRuntime(2835): at java.lang.reflect.Method.invoke(Method.java:372)
11-30 10:56:24.434: E/AndroidRuntime(2835): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
11-30 10:56:24.434: E/AndroidRuntime(2835): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
11-30 10:56:24.434: E/AndroidRuntime(2835): Caused by: java.lang.reflect.InvocationTargetException
11-30 10:56:24.434: E/AndroidRuntime(2835): at java.lang.reflect.Constructor.newInstance(Native Method)
11-30 10:56:24.434: E/AndroidRuntime(2835): at java.lang.reflect.Cons

Main Activity


package com.example.guille.listview;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;


public class MainActivity extends ActionBarActivity {
    Intent Leyenda;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt = (Button) findViewById(R.id.button);

        Leyenda = new Intent(this, Leyenda.class);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                startActivity(Leyenda);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

SECOND ACTIVITY


     package com.example.guille.listview;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

/**
 * Created by Guille on 20/11/15.
 */
public class Leyenda extends ActionBarActivity {

    ListViewAdapter adapter;
    String[] titulo = {"Titulo 1", "Titulo 2", "Titulo 3", "Titulo 4"};
    String[] subtitulo = {"subítulo 1", "subítulo 2", "subitulo 3", "subtitulo 4"};
    int[] imagenes = {R.drawable.task, R.drawable.mensaje, R.drawable.task, R.drawable.mensaje};

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

        ListView lista = (ListView) findViewById(R.id.listViewleyenda);

        adapter = new ListViewAdapter(this, imagenes, titulo, subtitulo);
        lista.setAdapter(adapter);


    }

    //ListViewAdapter
    public class ListViewAdapter extends BaseAdapter {
        // Declare Variables
        Context context;
        int[] imagenes;
        String[] titulos;
        String[] subtitulo;
        String[] contenido;
        LayoutInflater inflater;

        public ListViewAdapter(Context context, int[] imagenes, String[] titulos, String[] subtitulo) {
            this.context = context;
            this.imagenes = imagenes;
            this.titulos = titulos;
            this.subtitulo = subtitulo;

        }

        @Override
        public int getCount() {
            return titulos.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            // Declare Variables
            ImageView imgImg;
            TextView txtTitle;
            TextView txtSubtitulos;
            TextView txtContenido;

            //http://developer.android.com/intl/es/reference/android/view/LayoutInflater.html
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View itemView = inflater.inflate(R.layout.list_row, parent, false);

            // Locate the TextViews in listview_item.xml
            imgImg = (ImageView) itemView.findViewById(R.id.imagen_single_post_circuito);
            txtTitle = (TextView) itemView.findViewById(R.id.tv_titulo_single_post_circuito);
            txtSubtitulos = (TextView) itemView.findViewById(R.id.tv_contenido_single_post_circuito);


            // Capture position and set to the TextViews
            imgImg.setImageResource(imagenes[position]);
            txtTitle.setText(titulos[position]);
            txtSubtitulos.setText(subtitulo[position]);

            return itemView;
        }
    }
}

Android Manifest


     <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.guille.listview" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Leyenda">

        </activity>
    </application>

</manifest>
Christopher
  • 9,682
  • 7
  • 47
  • 76
Guillermo
  • 11
  • 2

3 Answers3

0

Use Intent...

Example:

Intent intent = new Intent(MainActivity.this, Leyenda.class);
startActivity(intent);  

or else declare a Leyenda class in manifest

0

Call the below code in button click of Main Activity.

 Leyenda = new Intent(MainActivity.this, Leyenda.class); 
 startActivity(Leyenda);
Sanoop Surendran
  • 3,484
  • 4
  • 28
  • 49
Noor Khan
  • 1
  • 1
0

It is due to OutOfMemoryError. add largeHeap = true to application tag in Manifest.

But it is not recommended and make sure add a try catch(OutOfMemoryError e) while setting

imgImg.setImageResource(imagenes[position]);

and compress your image before setting it to imgImg

Zar E Ahmer
  • 33,936
  • 20
  • 234
  • 300