การสร้าง ViewPager สำหรับ Android 1.5
ViewPager ของ Android ทำให้สามารถสร้างหน้าจอข้อมูลบนโทรศัพท์ที่ใช้ OS ของ Android ได้สะดวกขึ้น เพราะมีการออกแบบไว้แล้วอย่างเรียบร้อย สามารถใช้นิ้วลาก/ปัด/swipe เพื่อเปลี่ยนหน้า จากอีกหน้าหนึ่ง ไปยังหน้าหนึ่งได้ ดังตัวอย่างข้างล่างนี้
และสุดท้ายคือการสร้าง java ไฟล์หลัก คือ MainActivity.java ดังนี้
MainActivity.java
โดยสรุป โครงสร้างทั้งหมด มีดังภาพ
ในตัวอย่างนี้ ใช้ Android Studio 1.5 เพื่อสร้าง ViewPager โดยใช้ Fragment เพียง Fragment เดียว และส่งข้อมูลมาแสดงจำนวนทั้งหมด 6 หน้าด้วยกัน
การส่งข้อมูลไปยัง Fragment ใช้การส่งแบบ static โดยส่งเป็น String แล้วมาแยกเพื่อนำไปแสดงใน TextView จำนวน 2 ข้อความด้วยกัน
นอกจากนี้ จะมีการกำหนดให้มีหัวของแต่ละรายการ โดยใช้ PageStrip เพื่อแสดงรายการ
หลักการ
สร้าง Fragment สำหรับแสดงข้อมูลแต่ละหน้า ในตัวอย่างนี้ จะแสดงเฉพาะ ชื่อ และจังหวัดเท่านั้น โดยจะใช้ Fragment นี้กับข้อมูลทั้งหมด ซึ่งมีด้วยกัน 6 รายการ (แสดงรายการละหน้า) ไฟล์ Java Class สำหรับ Fragment นี้ จะกำหนดให้มีตัวแปร เป็น Static เพื่อรับการส่งข้อมูลเข้ามาจากภายนอกด้วย
จากนั้นจะสร้าง Adapter ซึ่งเป็นตัวกลางจัดการข้อมูลไปยัง Fragment
และสุดท้าย ก็จะเป็นหน้าหลัก ซึ่งมี Fragment ที่จะทำหน้าที่เป็น ViewPager หน้าหลักนี้ จะกำหนดข้อมูล จำนวน 6 รายการ และส่งข้อมูลไปยัง Java Class ของ Fragment และเรียกใช้งาน Adapter เพื่อให้แสดงข้อมูล ใน ViewPager ต่อไป
วิธีการ
1. สร้าง Fragment สำหรับแสดงข้อมูลเป็น ViewPager
ไฟล์ XML ชื่อ my_fragment.xml ประกอบด้วย TextView จำนวน 2 TextView ดังนี้
my_fragment.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="for Name" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="41dp"/> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_below="@+id/textView" android:textAppearance="?android:attr/textAppearanceLarge" android:text="for Province" android:layout_marginTop="10dp"/> </RelativeLayout>
ไฟล์ Java Class สำหรับคู่กับ my_fragment.xml ชื่อ MyFragment.java ดังนี้
MyFragment.java
package com.thongjoon.viewpager_demo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.Arrays; import java.util.List; public class MyFragment extends Fragment { //กำหนดให้เป็น static เพื่อจะได้ส่งข้อมูลจากภายนอก คือจาก PageViewActivity ได้ public static final MyFragment newInstance(String data) { MyFragment f = new MyFragment(); Bundle myBundle = new Bundle(1); myBundle.putString("myData", data); f.setArguments(myBundle); return f; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //รับข้อมูลที่ส่งเข่ามาจาก static String data = getArguments().getString("myData"); //แปลงข้อมูลที่เข้ามาในรูปของ String ให้อยู่ในรูปของ List ListdataList = Arrays.asList(data.split(";")); View v = inflater.inflate(R.layout.my_fragment, container, false); TextView thisName = (TextView)v.findViewById(R.id.textView); thisName.setText(dataList.get(0)); TextView thisProvince = (TextView)v.findViewById(R.id.textView2); thisProvince.setText(dataList.get(1)); return v; } }
2. สร้าง Adapter
ไฟล์ Java Class นี้ชื่อ MyPagerAdapter.java ดังนี้
MyPagerAdapter.java
package com.thongjoon.viewpager_demo; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import java.util.List; public class MyPagerAdapter extends FragmentPagerAdapter { private Listfragments; public MyPagerAdapter(FragmentManager fm, List fragments) { super(fm); this.fragments = fragments; } @Override public CharSequence getPageTitle(int position) { return "รายการที่ " + (position + 1) + " จาก " + this.fragments.size(); } @Override public Fragment getItem(int position) { return this.fragments.get(position); } @Override public int getCount() { return this.fragments.size(); } }
3. สร้าง หน้าหลัก
ไฟล์ XML โปรแกรม Android Studio เมื่อกำหนดให้ใช้ Blank Project จะสร้างให้ 2 ไฟล์ คือ activity_main.xml และ content_main.xml นำไฟล์ content_main.xml มาปรับ เป็นดังนี้
content_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.thongjoon.viewpager_demo.MainActivity" tools:showIn="@layout/activity_main"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@id/toolbar"> <android.support.v4.view.PagerTabStrip android:id="@+id/pager_header" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" android:paddingBottom="4dp" android:paddingTop="0dp" /> </android.support.v4.view.ViewPager> </RelativeLayout>
ในส่วน PagerTabStrip คือ ชื่อของหน้าแต่ละหน้า ถ้าไม่ต้องการให้มีชื่อหน้าแต่ละหน้า ก็สามารถตัดส่วนนี้ออกไปได้
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.thongjoon.viewpager_demo.MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"/> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main"/> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:src="@android:drawable/ic_dialog_email"/> </android.support.design.widget.CoordinatorLayout>
และสุดท้ายคือการสร้าง java ไฟล์หลัก คือ MainActivity.java ดังนี้
MainActivity.java
package com.thongjoon.viewpager_demo; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; public class MainActivity extends AppCompatActivity { MyPagerAdapter pageAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setIcon(R.mipmap.ic_launcher); List<Fragment> fragments = getFragments(); pageAdapter = new MyPagerAdapter(getSupportFragmentManager(), fragments); ViewPager pager = (ViewPager)findViewById(R.id.viewpager); pager.setAdapter(pageAdapter); } //สร้างข้อมูลในแต่ละหน้า ซึ่งจะส่งข้อมูลไปยัง MyFragment.newInstance() private List<Fragment> getFragments(){ List<Fragment> fragmentList = new ArrayList<Fragment>(); fragmentList.add(MyFragment.newInstance("สมหมาย;อยุธยา")); fragmentList.add(MyFragment.newInstance("สมศักดิ์;ปราจีนบุรี")); fragmentList.add(MyFragment.newInstance("สมทรง;ชัยนาท")); fragmentList.add(MyFragment.newInstance("สมศรี;นครปฐม")); fragmentList.add(MyFragment.newInstance("สมจิต;ราชบุรี")); fragmentList.add(MyFragment.newInstance("สมบูรณ์;ลพบุรี")); return fragmentList; } }สำหรับภาพ Logo ผมทำขึ้นใหม่ นำไปไว้ในห้อง mipmap เดี๋ยวนี้ ไม่นิยมให้ภาพ Logo อยู่ในตำแหน่งนี้ ถ้าจะเอาออก ให้ลบส่วนที่กำหนดภาพออกไป
getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setIcon(R.mipmap.ic_launcher);
โดยสรุป โครงสร้างทั้งหมด มีดังภาพ
ความคิดเห็น
แสดงความคิดเห็น