我的第一个Android应用程序存在很大问题

目标:

我想在滑动(左/右)时将视图更改为ViewPager元素

问题

我写了一些代码行,但是._不起作用。

我报告我的代码:

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>


请帮我。我快疯了

最佳答案

问题出在您的ElementAdapter类中。

如下更新ElementAdapter

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


输出:

java - Android-带有滑动的PagerAdapter-LMLPHP

这是关于PagerAdapter的很好的tutorial。希望这将有助于理解PagerAdapter的基本用法。

编码愉快!

10-08 18:13