2017-04-20 10 views
1

Ich habe ein großes Problem mit meinem ersten Android AppAndroid - PagerAdapter mit Swipe

Ziel:

I Blick in ein Element ViewPager ändern will, wenn ich (links/rechts) Swipe

Problem

Ich schrieb einige Zeilen Code, aber nicht funktioniert ._.

berichte ich meinen 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> 

Bitte helfen Sie mir. Ich bin verrückt

+0

wo initialisierte ElementArrayList? – FAT

+0

@FerdousAhamed in MainActivity: 'Element Element = neues Element (" Nome1 "," Nachname1 "); Element element1 = neues Element ("nome2", "Nachname2"); ArrayList elementArrayList = neue ArrayList (); elementArrayList.add (Element); elementArrayList.add (element1); ' – Juantums

+0

post Ihre MainActivity vollständigen Code – FAT

Antwort

1

Das Problem ist in Ihrer ElementAdapter Klasse.

aktualisieren ElementAdapter wie folgt:

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); 
    } 
} 

OUTPUT:

enter image description here

ist hier ein gutes tutorial über PagerAdapter. Hoffe, das wird helfen, die grundlegende Verwendung von PagerAdapter zu verstehen.

Happy coding ~

+0

Ich habe meinen Fehler verstanden, ich versuchte auf diese Weise (mit ViewGroup), aber mein Fehler war in "IsViewFromObject" -Methode, ich verließ "Return false" und natürlich gab er mir kein Ergebnis. Vielen Dank, Sie haben mir einen Fehler gezeigt, der mich wirklich verrückt machte – Juantums

+0

Sie haben Recht.Außerdem sollten Sie container.removeView ((View) view) in der destroyItem() Methode verwenden, sonst stürzt Ihre App beim Seitenwechsel ab. – FAT

+0

BTW, Wenn meine Lösung Ihnen hilft, Ihr Problem zu finden und nützlich scheint, dann markieren Sie dies als akzeptierte Antwort und geben Sie, wenn möglich, eine positive Bewertung. Vielen Dank im Voraus – FAT