Problem with ListView in Custom Fragment - Android

0

I have developed a small application that makes use of custom fragments and in these different ListView are displayed. The application works perfectly, that is, it correctly shows me the listView with the elements of each ArrayList, in its order, when sliding the screen the list to be displayed is changed, ect ....

But the problem comes when you click on an item in the list, the required operation is to show more detail of the item clicked, but instead of showing me the information of the entry that is clicked, it shows me the item information saved in the same position but from the following list (as if you skipped or added +1 when looking for that item, I do not know if I understand).

Do you know what can fail?

Main Class:

package com.example.jose.listview_personalizado;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private SectionsPagerAdapter mSectionsPagerAdapter;

    private ViewPager mViewPager;

    // ArrayList y adapter del menu.
    private static ArrayList<Animal> mamiferos;
    private static ArrayList<Animal> aves;
    private static ArrayList<Animal> reptiles;
    private static ArrayList<Animal> anfibios;
    private static ArrayList<Animal> peces;

    //private ArrayList<Plato> platoActual;

    private static ListView listViewAnimales;

    private static ItemAdapter adapter1;
    private static ItemAdapter adapter2;
    private static ItemAdapter adapter3;
    private static ItemAdapter adapter4;
    private static ItemAdapter adapter5;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        // Inicializamos los arrayList y el listView.
        mamiferos = new ArrayList<Animal>();
        aves = new ArrayList<Animal>();
        reptiles = new ArrayList<Animal>();
        anfibios = new ArrayList<Animal>();
        peces = new ArrayList<Animal>();

        //LLamamos al método encargado de rellenar los arrayList.
        llenaArrays();

        listViewAnimales = (ListView) findViewById(R.id.listView);

        // Creem l'adapter per separat per poder fer després crides a notifyDataSetChanged() i que refresqui el ListView
        adapter1 = new ItemAdapter(this,mamiferos);
        adapter2 = new ItemAdapter(this,aves);
        adapter3 = new ItemAdapter(this,reptiles);
        adapter4 = new ItemAdapter(this,anfibios);
        adapter5 = new ItemAdapter(this,peces);
    }

    @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();

        //Mediante un switch sabemos que acción realiza cada uno de los botones del menú.
        switch(id){
            case R.id.action_settings:
                mViewPager.setCurrentItem(0);
                break;
            case R.id.action_settings1:
                mViewPager.setCurrentItem(1);
                break;
            case R.id.action_settings2:
                mViewPager.setCurrentItem(2);
                break;
            case R.id.action_settings3:
                mViewPager.setCurrentItem(3);
                break;
            case R.id.action_settings4:
                mViewPager.setCurrentItem(4);
                break;
            case R.id.action_settings5:
                finish();
        }

        return super.onOptionsItemSelected(item);
    }

    public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";

       // private static Context context;

        public PlaceholderFragment() {
        }

        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_animales, container, false);

            listViewAnimales = (ListView) rootView.findViewById(R.id.listView);

            switch(getArguments().getInt(ARG_SECTION_NUMBER)){
                case 1:
                    //Posem el títol al menú.
                    getActivity().setTitle("Mamiferos");
                    listViewAnimales.setAdapter(adapter1);
                    break;
                case 2:
                    //Posem el títol al menú.
                    getActivity().setTitle("Aves");
                    listViewAnimales.setAdapter(adapter2);
                    break;
                case 3:
                    //Posem el títol al menú.
                    getActivity().setTitle("Reptiles");
                    listViewAnimales.setAdapter(adapter3);
                    break;
                case 4:
                    //Posem el títol al menú.
                    getActivity().setTitle("Anfibios");
                    listViewAnimales.setAdapter(adapter4);
                    break;
                case 5:
                    //Posem el títol al menú.
                    getActivity().setTitle("Peces");
                    listViewAnimales.setAdapter(adapter5);
                    break;
            }

            listViewAnimales.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> pariente, View view, int posicion, long id) {

                    Animal animal = (Animal) listViewAnimales.getItemAtPosition(posicion);
                    int foto = animal.get_idImagen();
                    String nombre = animal.get_nombre();
                    String descripcion = animal.get_descripcion();




                    Toast.makeText(getActivity(), descripcion, Toast.LENGTH_SHORT).show();



                    Bundle extras = new Bundle();
                    extras.putInt("Foto",foto);
                    extras.putString("Nombre",nombre);
                    extras.putString("Descripcion",descripcion);

                    //Se crea un intent y se le añaden los extras para enviarlos a la actividad de vista detalle.
                    Intent i = new Intent(getActivity(), VistaAnimal.class);
                    i.putExtras(extras);
                    getActivity().startActivity(i);
                }
            });
            return rootView;
        }
    }

    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a PlaceholderFragment (defined as a static inner class below).

            //Con switch diferenciamos que fragment mostrar.
            switch(position){
                case 0:
                    return PlaceholderFragment.newInstance(position + 1);
                case 1:
                    return PlaceholderFragment.newInstance(position + 1);
                case 2:
                    return PlaceholderFragment.newInstance(position + 1);
                case 3:
                    return PlaceholderFragment.newInstance(position + 1);
                case 4:
                    return PlaceholderFragment.newInstance(position + 1);
            }
            return null;
        }

        @Override
        public int getCount() {
            // Show 5 total pages.
            return 5;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return "SECTION 1";
                case 1:
                    return "SECTION 2";
                case 2:
                    return "SECTION 3";
                case 3:
                    return "SECTION 4";
                case 4:
                    return "SECTION 5";
            }
            return null;
        }
    }

    //Método encargado de rellenar los ArrayList.
    public void llenaArrays(){

        Animal aux1 = new Animal(1,R.drawable.a1,"Tigre de Bengala (Panthera tigris tigris)","El tigre de Bengala (Panthera tigris tigris), también conocido como tigre de Bengala real o tigre indio es una subespecie de tigre que habita en la India, Nepal, Bangladés, Bután, Birmania y Tíbet. Es la subespecie más numerosa y conocida de tigre, y se encuentra en una gran variedad de hábitats, incluyendo sabanas y bosques tropicales y subtropicales. Su piel es generalmente de color naranja o leonado. Existe una mutación genética que produce que la piel naranja del tigre sea sustituida por el color blanco; a estos tigres se les conoce como tigres blancos. Una mutación aún más rara (de la que existen menos de cien ejemplares, todos en cautiverio), se conoce como tigre dorado. El tigre es un animal nacional en la India y Bangladés.");
        Animal aux2 = new Animal(1,R.drawable.a2,"Ballena Azul (Balaenoptera musculus)","La ballena azul (Balaenoptera musculus), también conocida como rorcual azul, es una especie de cetáceo misticeto de la familia Balaenopteridae. Su tamaño medio es de entre 24 y 27 m de longitud y pesan entre 100 y 120 t, aunque hay registros de ejemplares de casi 30 m de longitud y 173 t de peso, que lo convierten en el mayor animal de la Tierra, no solo en la actualidad sino también el mayor del que se tenga noticia en la historia.");
        Animal aux3 = new Animal(1,R.drawable.a3,"Lobo (Canis lupus)","El lobo (Canis lupus) es una especie de mamífero placentario del orden de los carnívoros. El perro doméstico (Canis lupus familiaris) se considera miembro de la misma especie según distintos indicios, la secuencia del ADN y otros estudios genéticos. Los lobos fueron antaño abundantes y se distribuían por Norteamérica, Eurasia y el Oriente Medio. Actualmente, por una serie de razones relacionadas con el hombre, incluyendo el muy extendido hábito de la caza, los lobos habitan únicamente en una muy limitada porción del que antes fue su territorio.");
        Animal aux4 = new Animal(1,R.drawable.a4,"Elefante Africano (Loxodonta africana)","El elefante africano de sabana (Loxodonta africana) es un mamífero proboscideo de la familia de los elefántidos. Es el mayor mamífero terrestre que existe en la actualidad. Se trata de una de las tres últimas especies de proboscídeos que sobreviven hoy en día, siendo las otras el elefante africano de bosque (Loxodonta cyclotis, previamente considerado una subespecie de L. africana, aunque su clasificación taxonómica se mantiene en duda) y el elefante asiático (Elephas maximus).");
        Animal aux5 = new Animal(1,R.drawable.a5,"Chimpancé Común (Pan troglodytes)","Pan es un género de primates homínidos que comprende las especies Pan troglodytes (chimpancé común) y Pan paniscus (bonobo o chimpancé pigmeo). Por estudios de genética e inmunología se ha podido datar la divergencia entre su línea evolutiva y la de Gorilla hace 7-8 millones de años y de la de Homo hace unos seis millones de años. Las dos especies actuales se separaron de un último ancestro común hace unos dos millones de años, tras quedar aisladas una de la otra por el río Congo. Los seres humanos comparten el 98,9 % del genoma con el chimpancé.");

        mamiferos.add(aux1);
        mamiferos.add(aux2);
        mamiferos.add(aux3);
        mamiferos.add(aux4);
        mamiferos.add(aux5);

        Animal aux6 = new Animal(1,R.drawable.b1,"Avestruz (Struthio camelus)","El avestruz (Struthio camelus) es una especie de ave estrutioniforme de la familia Struthionidae. Es un ave grande que no vuela, sino que es corredora. Se halla en África, y en tiempos pasados también habitó en Oriente Medio. Es la más grande y la más pesada de las aves que aún existen; puede alcanzar los tres metros de altura y pesar unos 180 kg.");
        Animal aux7 = new Animal(1,R.drawable.b2,"Buitre Negro (Aegypius monachus)","El buitre negro (Aegypius monachus) es una especie de ave accipitriforme de la familia Accipitridae, la única de su género y uno de los pocos buitres que se pueden encontrar en Europa junto con el buitre leonado, el alimoche y el quebrantahuesos. La envergadura media de esta especie es de 250 cm, algo más que la del buitre leonado, aunque se han mencionado casos de individuos que podrían haber llegado a los tres metros. No se conocen subespecies.");
        Animal aux8 = new Animal(1,R.drawable.b3,"Urogallo Común (Tetrao urogallus)","El urogallo común (Tetrao urogallus) es una especie de ave galliforme de la familia Phasianidae. Se distribuye por buena parte de la Europa boreal (Escandinavia, región báltica y Rusia) y en pequeños enclaves de montaña de zonas templadas como la cornisa cantábrica, los Pirineos, los Alpes y el Jura. En España, desde 1979 se ha vedado la caza de esta especie, y desde 1986 tiene la catalogación de especie protegida aunque esto no ha supuesto un incremento en la población hasta el momento. Se le considera una reliquia de la era glaciar, pues tras este período la población se fue desplazando a las regiones frías de Europa y la alta montaña.");
        Animal aux9 = new Animal(1,R.drawable.b4,"Mochuelo Boreal (Aegolius funereus)","El mochuelo boreal (Aegolius funereus), también conocido como lechuza de Tengmalm, es una especie de ave de la familia Strigidae que habita en el norte de Europa, los Alpes, áreas de los Balcanes y por los Pirineos. Se trata del búho de montaña por excelencia, y reside en bosques densos de coníferas. Nunca se aleja de las zonas de cría.");
        Animal aux10 = new Animal(1,R.drawable.b5,"Cacatúa","Las cacatúas son las 21 especies de aves psitaciformes que pertenecen a la familia Cacatuidae, la única familia de la superfamilia Cacatuoidea. Junto a las superfamilias Psittacoidea (loros verdaderos) y Strigopoidea (loros de Nueva Zelanda) forman el orden de las Psittaciformes. El emplazamiento de las cacatúas en una familia separada es un hecho que no se discute, aunque muchos otros aspectos de los linajes de los psitaciformes vivos no están resueltos. La familia está distribuida principalmente por Australasia, extendiéndose desde las Filipinas y las islas de Indonesia oriental que pertenecen a la Wallacea hasta Nueva Guinea, Australia y las islas Salomón.");

        aves.add(aux6);
        aves.add(aux7);
        aves.add(aux8);
        aves.add(aux9);
        aves.add(aux10);

        Animal aux11 = new Animal(1,R.drawable.c1,"Cocodrilo del Nilo (Crocodylus niloticus)","El cocodrilo del Nilo (Crocodylus niloticus) es una especie de saurópsido crocodilio de la familia Crocodylidae. Es una de las tres especies de cocodrilos que habitan en África, y la segunda en tamaño en el mundo, pues puede alcanzar los 6 m de largo y pesar hasta 730 kg; aunque sus tallas medias son de 5 metros y de 225 kg.");
        Animal aux12 = new Animal(1,R.drawable.c2,"Tortuga Carey (Eretmochelys imbricata)","La tortuga carey (Eretmochelys imbricata) es una especie de tortuga marina de la familia de los quelónidos, que se halla en peligro crítico de extinción. Es la única especie del género Eretmochelys. Existen dos subespecies, Eretmochelys imbricata imbricata que se puede encontrar en el océano Atlántico y Eretmochelys imbricata bissa, localizada en la región indo-pacífica.");
        Animal aux13 = new Animal(1,R.drawable.c3,"Pitón de Birmania (Python bivittatus)","La pitón de Birmania (Python bivittatus) es una especie de serpiente perteneciente a la familia Pythonidae, propia de la Región indomalaya. Es una serpiente constrictora originaria de la India, Pakistán, Nepal e Indochina, y fue introducida en Florida como mascota, pero cuando crecieron demasiado y ya no las podían mantener, sus dueños las liberaron en el Parque Nacional de los Everglades, volviéndose un problema para las especies autóctonas. Es la constrictora más grande de la India y una de las seis serpientes más grandes del mundo.");
        Animal aux14 = new Animal(1,R.drawable.c4,"Iguana Verde (Iguana iguana)","La iguana común o iguana verde (Iguana iguana) es un gran lagarto arbóreo de América Central y de Sudamérica. Se encuentra desde México hasta el sudeste de Brasil y el Pantanal del Paraguay, así como también en islas del Caribe y, de manera asilvestrada, en Florida (Estados Unidos). Miden hasta 2 m de longitud de cabeza hasta la cola y pueden llegar a pesar más de 15 kg. Pertenece al grupo mayor y de más complicado diseño de los saurios del Nuevo Mundo, al que pertenecen la mayoría de las especies. Se incluye en la familia de los iguánidos.");
        Animal aux15 = new Animal(1,R.drawable.c5,"Cobra Real (Ophiophagus hannah)","La cobra real (Ophiophagus hannah) es un especie de serpiente de la familia Elapidae y único miembro del género Ophiophagus. Se distribuye por India, Bangladés, Birmania, sur de China, Vietnam, Laos, Camboya, Tailandia, Malasia, Indonesia y Filipinas. Es la serpiente venenosa más grande que existe. El promedio de su longitud es de 3,7 m pero algunas alcanzan los 5,5 metros. Es una serpiente delgada, de color oliva o pardo, con ojos de color bronce.");

        reptiles.add(aux11);
        reptiles.add(aux12);
        reptiles.add(aux13);
        reptiles.add(aux14);
        reptiles.add(aux15);

        Animal aux16 = new Animal(1,R.drawable.d1,"Sapo Común (Bufo bufo)","El sapo común (Bufo bufo) o sapo europeo es un anuro muy habitual en toda clase de hábitats europeos, sobre todo en aguas estancadas: balsas de riego, albercas, etc, al ser más resistente a las aguas insalubres que otras especies de anfibios durante la fase de renacuajo. Se distribuye por toda Europa salvo Irlanda, Islandia y algunas islas mediterráneas, además de Asia noroccidental y pequeñas partes del noreste africano. Es uno de los anfibios más conocidos, dada su distribución y requerimientos ecológicos laxos.");
        Animal aux17 = new Animal(1,R.drawable.d2,"Salamandra Común (Salamandra salamandra)","La salamandra común (Salamandra salamandra) es una especie de anfibio urodelo de la familia Salamandridae. Es el más común de los urodelos en Europa. De hábitos terrestres, únicamente entra en el agua para parir, y muchas subespecies lo hacen en tierra. Es un urodelo inconfundible, de fondo negro y manchas variadas amarillas muy intensas que pueden llegar a cubrir la casi totalidad del cuerpo. A veces también se aprecian manchas de color rojizo.");
        Animal aux18 = new Animal(1,R.drawable.d3,"Rana Arborícola Rechoncha (Litoria caerulea)","La rana arborícola verde de Australia, rana arborícola de White o rana arborícola rechoncha (Litoria caerulea) es una especie de anfibio anuro perteneciente a la familia Hylidae nativa de Australia y Nueva Guinea, con poblaciones introducidas en Nueva Zelanda y Estados Unidos. La especie pertenece al género Litoria. Su fisiología es similar a la de algunas especies del género, particularmente la rana arborícola magnífica (Litoria splendida) y la rana arborícola gigante (Litoria infrafrenata).");
        Animal aux19 = new Animal(1,R.drawable.d4,"Tepelcua (Dermophis mexicanus)","La tapalcua o tepelcua (Dermophis mexicanus) es una especie de anfibio gimnofión de la familia Dermophiidae. Es endémica del sur de México y América Central: habita en El Salvador, en el sur y en el este de Guatemala, en el noroeste y en el sur de Honduras y en el oeste de Nicaragua. Tal vez, también en Belice.");
        Animal aux20 = new Animal(1,R.drawable.d5,"Tritón del este Americano (Notophthalmus viridescens)","El tritón del este, también conocido como tritón americano de lunares rojos, tritón verde americano, tritón del este americano (Notophthalmus viridescens), es una especie de caudado o salamandra de la familia de los salamándridos. Se distribuye en Norteamérica.");

        anfibios.add(aux16);
        anfibios.add(aux17);
        anfibios.add(aux18);
        anfibios.add(aux19);
        anfibios.add(aux20);

        Animal aux21 = new Animal(1,R.drawable.e1,"Tiburón Blanco (Carcharodon carcharias)","El tiburón blanco (Carcharodon carcharias) es una especie de pez cartilaginoso lamniforme de la familia Lamnidae que se encuentra en las aguas cálidas y templadas de casi todos los océanos. Esta especie es la única del género Carcharodon que sobrevive en la actualidad.");
        Animal aux22 = new Animal(1,R.drawable.e2,"Anguila Eléctrica (Electrophorus electricus)","La anguila eléctrica (Electrophorus electricus), también llamada temblón, temblador, gimnoto, pilaké o poraquê, es una especie de pez de la familia Gymnotidae. Puede emitir descargas eléctricas de hasta 850 voltios a partir de un grupo de células especializadas. Emplea las descargas eléctricas para cazar presas, para defenderse y para comunicarse con otras anguilas. Es la única especie de su género.");
        Animal aux23 = new Animal(1,R.drawable.e3,"Atún Común (Thunnus thynnus)","El atún azul o común (Thunnus thynnus), también llamado atún de aleta azul, atún rojo, cimarrón o en las Islas Canarias patudo, es una de las especies de atún en la familia Scombridae. Es muy conocido como Atún rojo del Atlántico, Atún rojo gigante (para aquellos individuos que superan los 150 kilogramos) y formalmente como atún. El atún rojo es originario de ambas orillas del Atlántico, tanto la occidental como la oriental, y también del mar Mediterráneo. Ya está extinto en las aguas del mar Negro y del mar Caspio. Esta especie del atlántico es muy cercano a otras especies de atún rojo, como el atún rojo del Pacífico y el atún rojo del sur.");
        Animal aux24 = new Animal(1,R.drawable.e4,"Raya Pintada (Aetobatus narinari)","La raya jaspeada, también conocida en Venezuela como chucho y en Ecuador como raya pintada (Aetobatus narinari), es un pez cartilaginoso que habita en aguas costeras poco profundas de los arrecifes de coral y bahías, en profundidades de hasta 80 metros. Su cola es, generalmente, dos a tres veces más larga que su cuerpo y posee en su base varias espinas venenosas.");
        Animal aux25 = new Animal(1,R.drawable.e5,"Pez Luna (Mola mola)","El pez luna (Mola mola) es un pez pelágico tetraodontiforme de la familia Molidae. Es el pez óseo más pesado del mundo, con una media de 1000 kg de peso y con ejemplares que alcanzan más de 3 m de longitud y superan las 2 toneladas. Es una especie cosmopolita que habita en aguas tropicales y templadas a lo largo de todo el planeta. Tiene el cuerpo aplastado lateralmente y cuando extiende sus aletas dorsales y ventrales, el pez es tan largo como alto.");

        peces.add(aux21);
        peces.add(aux22);
        peces.add(aux23);
        peces.add(aux24);
        peces.add(aux25);
    }
}

Class extending from BaseAdapter:

    package com.example.jose.listview_personalizado;

/**
 * Created by Jose on 11/08/2017.
 */

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;

//Clase que nos servirá como adaptador del ArrayList.
public class ItemAdapter extends BaseAdapter {

    private Context context;
    private List<Animal> items;

    public ItemAdapter(Context context,List<Animal> items){
        this.context = context;
        this.items = items;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;

        if (convertView == null) {
            // Create a new view into the list.
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflater.inflate(R.layout.element_animal, parent, false);
        }

        // Set data into the view.
        ImageView foto = (ImageView) rowView.findViewById(R.id.imageView2);
        TextView nombre = (TextView) rowView.findViewById(R.id.textView);

        Animal animal = items.get(position);
        nombre.setText(animal.get_nombre());
        foto.setImageResource(animal.get_idImagen());

        return rowView;
    }
}
    
asked by Jbg 01.09.2017 в 10:15
source

0 answers