[JAVA] ViewPager-Grundlagen

Überprüfungsumgebung

Der Inhalt dieses Artikels wurde in der folgenden Umgebung überprüft.

Überblick

Eine Ansicht, die mit Fragment als Seite gewechselt werden kann. ViewPager sollte wie ListView in Kombination mit Adapter verwendet werden.

In einer Ansicht, die diese Ansicht erbt, können Sie auch über den Bildschirm wischen, um Seiten und Registerkarten zu wechseln. Dieses Mal werde ich die grundlegende Verwendung von ViewPager erläutern.

ViewPager_01 .png

App zu erstellen

Eine App, mit der Sie durch Wischen zwischen Selbsteinführungsseiten wechseln können

Vollständiges Bild

ViewPager_02 .png

Liste der erstellten Dateien

Dateiname Erläuterung
MainActivity.java
activity_main.xml
ViewPager-Bildschirmlayout mit Ansichten und Schaltflächen sowie deren Aktivität
NameFragment.java
fragment_name.xml
Layout der ersten Seite und ihres Fragments (Namensseite)
AgeFragment.java
fragment_age.xml
Layout der zweiten Seite und ihres Fragments (Altersseite)
FoodFragment.java
fragment_food.xml
Layout der 3. Seite und ihres Fragments (Seite des Lieblingsessens)
UserInfoViewPagerAdapter.java Adapter, der Fragment beim Wischen erzeugt

Details zur Namensseite

Der Code für die Namensseite sieht folgendermaßen aus:

Layoutdatei

fragment_name.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="jp.co.casareal.sample.viewpagersample.fragment.NameFragment">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Die erste Seite"
        android:textSize="20sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Der Name ist Casa Real Taro."
        android:textSize="20sp" />

</LinearLayout>

Java-Quellcode

NameFragment.java


package jp.co.casareal.sample.viewpagersample.fragment;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import jp.co.casareal.sample.viewpagersample.R;

/**
 * A simple {@link Fragment} subclass.
 */
public class NameFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_name, container, false);
    }

}

Adapterdetails

Es gibt zwei Arten von Adaptern. "FragmentPagerAdapter" und "FragmentStatePagerAdapter". Da jede Operation anders ist, muss sie entsprechend der zu erstellenden Anwendung ausgewählt werden. Wenn die Seite gewechselt wird, behält "FragmentPagerAdapter" das angezeigte Fragment im Speicher. "FragmentStatePagerAdapter" verwirft Fragment, wenn die Seite gewechselt wird. Da die Anzahl der Seiten diesmal gering ist, habe ich "FragmentPagerAdapter" verwendet.

UserInfoViewPagerAdapter.java


package jp.co.casareal.sample.viewpagersample.adapter;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import jp.co.casareal.sample.viewpagersample.fragment.AgeFragment;
import jp.co.casareal.sample.viewpagersample.fragment.FoodFragment;
import jp.co.casareal.sample.viewpagersample.fragment.NameFragment;

/**
 * Created by naoi on 2017/04/24.
 */

public class UserInfoViewPagerAdapter extends FragmentPagerAdapter {
    private static final int PAGE_NUM = 3;

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

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = null;
        switch (position){
            case 0:
                fragment = new NameFragment();
                break;
            case 1:
                fragment = new AgeFragment();
                break;
            default:
                fragment = new FoodFragment();
        }
        return fragment;
    }

    @Override
    public int getCount() {
        return PAGE_NUM;
    }
}

Details zu der Aktivität, in der sich der ViewPager befindet

Layoutdatei

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="jp.co.casareal.sample.viewpagersample.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:onClick="onClickGoToTop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Zur ersten Seite"/>
        <Button
            android:onClick="onClickNext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="zur nächsten Seite"/>
    </LinearLayout>
    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

Java-Quellcode

Der Punkt hier ist, dass, wenn Sie die Seite mit Java-Quellcode ändern möchten, Sie sie mit der setCurrentItem () -Methode von Adapter ändern können.

 MainActivity.java


package jp.co.casareal.sample.viewpagersample;

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

import jp.co.casareal.sample.viewpagersample.adapter.UserInfoViewPagerAdapter;

public class MainActivity extends AppCompatActivity {

    private ViewPager pager;

    private FragmentPagerAdapter adapter;

    private int currentPage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pager = (ViewPager) findViewById(R.id.pager);

        adapter = new UserInfoViewPagerAdapter(getSupportFragmentManager());
        pager.setAdapter(adapter);
        currentPage = 0;

    }

    public void onClickNext(View view) {
        currentPage ++;
        pager.setCurrentItem(currentPage);
    }

    public void onClickGoToTop(View view) {
        currentPage = 0;
        pager.setCurrentItem(currentPage);
    }
}

Referenz

https://developer.android.com/reference/android/support/v13/app/FragmentPagerAdapter.html

https://developer.android.com/training/implementing-navigation/lateral.html

Recommended Posts

ViewPager-Grundlagen
Rails Grundlagen
Ruby-Grundlagen
Fragmentgrundlagen
JPA-Grundlagen 1
Docker-Grundlagen
Java-Grundlagen
Java-Grundlagen
JavaScript-Grundlagen
JPA-Grundlagen 2
Java-Grundlagen
RecyclerView-Grundlagen
Schienen CSV Basic
Grundlagen des Rails-Routings
Grundlagen der Rails-Datenbank
Grundlagen des Rails Logger
Grundlagen der Java-Programmierung
Grundlagen von Ruby
Java JAR-Grundlagen
Objektorientierte (Java) Grundlagen
vim (gitbush) Grundlagen
Grundlagen regulärer Ausdrücke
Grundlagen der Java-Parallelverarbeitung
Rspec Basics [Rails]
Grundlagen der Stream-API