Android——用FragmentPagerAdapter實現Fragment的滑動效果

來源:互聯網
上載者:User

標籤:

效果:

ViewPage來源於android -support.v4

  1. 什麼是viewPage?
    ViewPage 類似於ListView 用於顯示多個View集合. 支援頁面左右滑動.

  2. 如何使用viewPage以及需要注意點?
    ViewPage 需要Adapter:
    PagerAdapter 有四個重要方法:
    (1) void destroyItem(ViewGroup container, int position, Object object): 銷毀
    (2)Object instantiateItem(ViewGroup container, int position) : 添加View
    (3) int getCount() : 獲得View總是
    (4) boolean isViewFromObject(View view, Object obj) : View比較

    監聽器: addOnPageChangeListener :頁面發生改變
    (1) void onPageSelected(int position) :View進行切換 :position 新的頁面位置
    (2) void onPageScrolled(int arg0, float arg1, int arg2) :頁面正在滾動的時候[滑動位移資訊],回調
    (3) void onPageScrollStateChanged(int arg0) :頁面狀態發生變化的時候,回調

ListView 因為使用相同的View,所以採用複用。
而ViewPage ,是基於View ,子類有許多不同,所以要登出.

public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
View view= imageVisws.get(position % images.length);
container.removeView(view); // 重複加入會引起異常
container.addView(view);
return view;

導致異常:java.lang.IllegalStateException The specified child already has a parent. You must call removeView()
原因: 被加入的View 有父類, 所以添加到另外一個集合中之前,必須清除父類.
}

activity_activityad.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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.chenshuai.test322.Activityad">    <!--ViewPager-->    <android.support.v4.view.ViewPager        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/viewpage">        <!--PagerTitleStrip加標題-->        <android.support.v4.view.PagerTitleStrip            android:layout_width="match_parent"            android:layout_height="wrap_content">        </android.support.v4.view.PagerTitleStrip>    </android.support.v4.view.ViewPager></LinearLayout>
layout_ad1.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/coco"        /></LinearLayout>
layout_ad2.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/df"       /></LinearLayout>
layout_ad3.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/hh"        /></LinearLayout>
activityad.java
package com.example.chenshuai.test322;import android.content.Context;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import java.util.ArrayList;import java.util.List;public class Activityad extends AppCompatActivity {    private ViewPager viewPager;    private List<View> content;    private LayoutInflater inflater;    private List<String> title;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_activityad);        viewPager = (ViewPager)findViewById(R.id.viewpage);        //準備資料        content = new ArrayList<View>();        //inflater = LayoutInflater.from(this);        inflater = getLayoutInflater();        /**         * 新增內容content         */        content.add(inflater.inflate(R.layout.layout_ad1,null));        content.add(inflater.inflate(R.layout.layout_ad2,null));        content.add(inflater.inflate(R.layout.layout_ad3,null));        /**         * 添加每個內容對應的標題title         */        title = new ArrayList<String>();        title.add("體育新聞");        title.add("娛樂新聞");        title.add("軍事新聞");        viewPager.setAdapter(new viewadapter(this,content,title));    }    public class viewadapter extends PagerAdapter    {        private Context context;        private List<View> content;        private List<String> title;        //重寫構造方法,加圖片,加標題        public viewadapter(Context context, List<View> content,                                  List<String> title) {            this.context = context;            this.content = content;            this.title = title;        }        // 必須 1- 擷取要滑動的控制項的數量,在這裡我們以滑動的廣告欄為例,那麼這裡就應該是展示的廣告圖片的ImageView數量        @Override        public int getCount() {            return content.size();        }        //實現標題的方法        @Override        public CharSequence getPageTitle(int position) {            return  title.get(position);        }        //必須 2-  來判斷顯示的是否是同一張圖片,這裡我們將兩個參數相比較返回即可        @Override        public boolean isViewFromObject(View view, Object object) {            return view == object;        }        //必須 3-  PagerAdapter只緩衝三張要顯示的圖片,如果滑動的圖片超出了緩衝的範圍,就會調用這個方法,將圖片銷毀        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            ((ViewPager)container).removeView(content.get(position));            //super.destroyItem(container, position, object);        }        //必須 4- // 當要顯示的圖片可以進行緩衝的時候,會調用這個方法進行顯示圖片的初始化,        // 我們將要顯示的ImageView加入到ViewGroup中,然後作為傳回值返回即可        @Override        public Object instantiateItem(ViewGroup container, int position) {            ((ViewPager)container).addView(content.get(position));            return  content.get(position);        }    }}

 



Android——用FragmentPagerAdapter實現Fragment的滑動效果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.