2017-04-20 4 views
1

J'ai un gros problème avec mon premier Android AppAndroid - PagerAdapter avec Swipe

Objectif:

Je veux changer la vue dans un élément ViewPager quand je Balayez vers la (gauche/droite)

Problème

J'ai écrit quelques lignes de code, mais ne fonctionne pas ._.

je signaler mon code:

MainActivity.java

package com.example.macbookpro.myapplication; 

import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Element element=new Element("nome1","surname1"); 
     Element element1=new Element("nome2","surname2"); 
     ArrayList<Element> elementArrayList=new ArrayList<Element>(); 
     elementArrayList.add(element); 
     elementArrayList.add(element1); 
     ViewPager viewPager=(ViewPager) findViewById(R.id.swipeView); 
     ElementAdapter elementAdapter=new ElementAdapter(elementArrayList,this); 
     viewPager.setAdapter(elementAdapter); 


    } 
} 

ElementAdapter.java

public class ElementAdapter extends PagerAdapter { 
    private ArrayList<Element> element=new ArrayList<Element>(); 
    private Context ctx; 

    public ElementAdapter(ArrayList<Element> element, Context ctx) { 
     this.element = element; 
     this.ctx = ctx; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View item_view = inflater.inflate(R.layout.element,container,false); 
     TextView nome = (TextView) item_view.findViewById(R.id.nome); 
     TextView surname= (TextView) item_view.findViewById(R.id.surname); 
     nome.setText(element.get(position).getNome()); 
     surname.setText(element.get(position).getSurname()); 
     container.addView(item_view); 

     return item_view; 
    } 

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

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return false; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     super.destroyItem(container, position, object); 
    } 
} 

Element.java

public class Element { 
    private String nome; 
    private String surname; 

    public Element(String nome, String surname) { 
     this.nome = nome; 
     this.surname = surname; 
    } 

    public String getNome() { 
     return nome; 
    } 

    public void setNome(String nome) { 
     this.nome = nome; 
    } 

    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 

ActivityMain.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" android:layout_width="match_parent" 
    android:layout_height="match_parent" tools:context="com.example.macbookpro.myapplication.MainActivity"> 
    <View 
     android:id="@+id/centerShim5" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_centerInParent="true" 
     android:visibility="invisible" /> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/swipeView" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:layout_centerInParent="true" 
     android:layout_alignBottom="@id/centerShim5" 
     android:visibility="visible" /> 

    <Button 
     android:text="Button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:id="@+id/button" /> 
</RelativeLayout> 

element.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight"> 

    <TextView 
     android:id="@+id/nome" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical" 
     android:text="Example application" 
     android:textSize="20dp" 
     android:layout_alignLeft="@+id/surname" 
     android:layout_alignStart="@+id/surname" 
     android:layout_above="@+id/surname" /> 

    <TextView 
     android:id="@+id/surname" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ellipsize="marquee" 
     android:singleLine="true" 
     android:text="Description" 
     android:textSize="12sp" 
     android:textStyle="normal|bold|italic" 
     android:layout_alignParentBottom="true"/> 

</RelativeLayout> 

S'il vous plaît aidez-moi. Je deviens fou

+0

Où avez-vous initialisé elementArrayList? – FAT

+0

@FerdousAhamed dans MainActivity: 'Element element = new Element (" nome1 "," nom1 "); Elément element1 = new Elément ("nome2", "nom2"); ArrayList elementArrayList = new ArrayList (); elementArrayList.add (élément); elementArrayList.add (element1); ' – Juantums

+0

poster votre code complet MainActivity – FAT

Répondre

1

Le problème est dans votre classe ElementAdapter.

Mise à jour ElementAdapter comme ci-dessous:

public class ElementAdapter extends PagerAdapter { 

    private ArrayList<Element> element = new ArrayList<Element>(); 
    private Context ctx; 

    public ElementAdapter(ArrayList<Element> element, Context ctx) { 
     this.element = element; 
     this.ctx = ctx; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     // Use ViewGroup 
     ViewGroup item_view = (ViewGroup) inflater.inflate(R.layout.element, container ,false); 

     TextView nome = (TextView) item_view.findViewById(R.id.nome); 
     TextView surname= (TextView) item_view.findViewById(R.id.surname); 

     nome.setText(element.get(position).getNome()); 
     surname.setText(element.get(position).getSurname()); 

     container.addView(item_view); 

     return item_view; 
    } 

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

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object view) { 

     // Remove specific view 
     container.removeView((View) view); 
    } 
} 

SORTIE:

enter image description here

est ici un bon tutorial à propos PagerAdapter. Espérons que cela aidera à comprendre l'utilisation de base de PagerAdapter.

Codage heureux ~

+0

J'ai compris mon erreur, j'ai essayé de cette façon (avec ViewGroup), mais mon erreur était dans la méthode "isViewFromObject", j'ai laissé "return false" et bien sûr il ne m'a pas donné de résultat. merci beaucoup, tu m'as montré une erreur qui me rendait vraiment folle – Juantums

+0

Tu as raison.De même, vous devez utiliser container.removeView (vue (View)) dans la méthode destroyItem() sinon votre application va planter pendant le changement de page. – FAT

+0

Btw, Si ma solution vous aide à trouver votre problème et vous semble utile, veuillez le marquer comme réponse acceptée et donner un upvote si possible. Merci d'avance – FAT