思路就是viewpage+fragment,给一个无线大的数,然后根据下标,指定需要显示的页面,一直都是用别人的,索性在写一次好了。
activity:
package com.example.administrator.testviewpage;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends FragmentActivity {
int currentIndext;//现在在哪个下表下
Handler mHandle;
ViewPager viewpage;
Fragment1 fragment1;
Fragment2 fragment2;
Fragment3 fragment3;
Thread thread;
List mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
currentIndext = 0;
mHandle = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
currentIndext++;
setFragmentWithIndex(currentIndext);
break;
}
super.handleMessage(msg);
}
};
viewpage = (ViewPager) findViewById(R.id.viewpage);
mList = new ArrayList();
fragment1 = new Fragment1();
fragment2 = new Fragment2();
fragment3 = new Fragment3();
mList.add(fragment1);
mList.add(fragment2);
mList.add(fragment3);
MyViewPageAdapter myViewPageAdapter = new MyViewPageAdapter(getSupportFragmentManager(), mList, getSupportFragmentManager());
viewpage.setAdapter(myViewPageAdapter);
viewpage.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//让线程中断
thread.interrupt();
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
if (state == 2) {
//设置当前下标
int currentIndex = viewpage.getCurrentItem();
currentIndext = currentIndex;
setFragmentWithIndex(currentIndex);
try {
thread.start();
} catch (Exception e) {
}
}
}
});
thread = new Thread() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(2000);
mHandle.sendEmptyMessage(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
thread.start();
}
public void setFragmentWithIndex(int index) {
viewpage.setCurrentItem(index);
}
}
关键:dapter
package com.example.administrator.testviewpage;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.View;
import java.util.List;
/**
* Created by Administrator on 2017/5/2.
*/
public class MyViewPageAdapter extends FragmentPagerAdapter{
List<Fragment> mList;
FragmentManager mFragmentmanager;
public MyViewPageAdapter(FragmentManager fm, List<Fragment> mList, FragmentManager mFragmentmanager) {
super(fm);
this.mList = mList;
this.mFragmentmanager = mFragmentmanager;
}
@Override
public Fragment getItem(int position) {
if(mList.size()-1>=position){
return mList.get(position);
}else {
if(position%mList.size()==0){
return new Fragment1();
}else if(position%mList.size()==1){
return new Fragment2();
}else {
return new Fragment3();
}
}
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
}
OK,完成。其中的坑就是dapter里面的getitem,你不能给他现有的list<Fragment>里面的fragment,必须给他新的,否则就报错了。
至于性能嘛,这种方式可能会带来一些性能问题。