├── .gitignore ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── dictionaries │ └── Administrator.xml ├── encodings.xml ├── findbugs-idea.xml ├── gradle.xml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── diygreen │ │ └── pageradapterrefresh │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── diygreen │ │ │ └── pageradapterrefresh │ │ │ ├── FPagerAdapter1Activity.java │ │ │ ├── FPagerAdapter2Activity.java │ │ │ ├── FSPagerAdapterActivity.java │ │ │ ├── MainActivity.java │ │ │ ├── PagerAdapterActivity.java │ │ │ ├── SimpleDemoActivity.java │ │ │ ├── adapter │ │ │ ├── APagerAdapter.java │ │ │ ├── DemoPagerAdapter.java │ │ │ ├── FPagerAdapter1.java │ │ │ ├── FPagerAdapter11.java │ │ │ ├── FPagerAdapter2.java │ │ │ └── FSPagerAdapter.java │ │ │ └── fragment │ │ │ └── FragmentTest.java │ └── res │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── activity_pageradapter.xml │ │ ├── activity_simpledemo.xml │ │ ├── fragment_test.xml │ │ └── item_vp_demopageradapter.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── diygreen │ └── pageradapterrefresh │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | PagerAdapterRefresh -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/dictionaries/Administrator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/findbugs-idea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 32 | 203 | 216 | 225 | 226 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | 47 | 48 | 49 | 50 | 1.7 51 | 52 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.3" 6 | 7 | defaultConfig { 8 | applicationId "com.diygreen.pageradapterrefresh" 9 | minSdkVersion 14 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:23.3.0' 26 | } 27 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in D:\Development\Android\android-sdk-windows/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/diygreen/pageradapterrefresh/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 25 | 28 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/FPagerAdapter1Activity.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.view.ViewPager; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | 8 | import com.diygreen.pageradapterrefresh.adapter.FPagerAdapter1; 9 | 10 | import java.util.LinkedList; 11 | import java.util.List; 12 | 13 | public class FPagerAdapter1Activity extends AppCompatActivity { 14 | private ViewPager mContentVP; 15 | 16 | private FPagerAdapter1 mPagerAdapter; 17 | private List mDataList; 18 | 19 | @Override 20 | protected void onCreate(Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | setContentView(R.layout.activity_pageradapter); 23 | 24 | initView(); 25 | initData(); 26 | } 27 | 28 | private void initView() { 29 | this.mContentVP = (ViewPager) findViewById(R.id.vp_content); 30 | } 31 | 32 | private void initData() { 33 | mDataList = new LinkedList<>(); 34 | for (int i = 0; i < 6; i++) { 35 | mDataList.add(i); 36 | } 37 | 38 | mPagerAdapter = new FPagerAdapter1(getSupportFragmentManager(), mDataList); 39 | mContentVP.setAdapter(mPagerAdapter); 40 | } 41 | 42 | public void onClick(View v) { 43 | switch (v.getId()) { 44 | case R.id.btn_refresh: 45 | refresh(); 46 | break; 47 | case R.id.btn_add: 48 | add(); 49 | break; 50 | case R.id.btn_delete: 51 | delete(); 52 | break; 53 | case R.id.btn_clean: 54 | clear(); 55 | break; 56 | } 57 | } 58 | 59 | private void refresh() { 60 | if (checkData()) return; 61 | mDataList.set(0, 7); 62 | mPagerAdapter.updateData(mDataList); 63 | } 64 | 65 | private void add() { 66 | mDataList.add(7); 67 | mPagerAdapter.updateData(mDataList); 68 | } 69 | 70 | private void delete() { 71 | if (checkData()) return; 72 | mDataList.remove(0); 73 | mPagerAdapter.updateData(mDataList); 74 | } 75 | 76 | private void clear() { 77 | if (checkData()) return; 78 | mDataList.clear(); 79 | mPagerAdapter.updateData(mDataList); 80 | } 81 | 82 | private boolean checkData() { 83 | return mDataList.size() == 0; 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/FPagerAdapter2Activity.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.view.ViewPager; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | 8 | import com.diygreen.pageradapterrefresh.adapter.FPagerAdapter2; 9 | 10 | import java.util.LinkedList; 11 | import java.util.List; 12 | 13 | public class FPagerAdapter2Activity extends AppCompatActivity { 14 | 15 | private ViewPager mContentVP; 16 | 17 | private FPagerAdapter2 mPagerAdapter; 18 | private List mDataList; 19 | 20 | @Override 21 | protected void onCreate(Bundle savedInstanceState) { 22 | super.onCreate(savedInstanceState); 23 | setContentView(R.layout.activity_pageradapter); 24 | 25 | initView(); 26 | initData(); 27 | } 28 | 29 | private void initView() { 30 | this.mContentVP = (ViewPager) findViewById(R.id.vp_content); 31 | } 32 | 33 | private void initData() { 34 | mDataList = new LinkedList<>(); 35 | for (int i = 0; i < 6; i++) { 36 | mDataList.add(i); 37 | } 38 | 39 | mPagerAdapter = new FPagerAdapter2(getSupportFragmentManager(), mDataList); 40 | mContentVP.setAdapter(mPagerAdapter); 41 | } 42 | 43 | public void onClick(View v) { 44 | switch (v.getId()) { 45 | case R.id.btn_refresh: 46 | refresh(); 47 | break; 48 | case R.id.btn_add: 49 | add(); 50 | break; 51 | case R.id.btn_delete: 52 | delete(); 53 | break; 54 | case R.id.btn_clean: 55 | clear(); 56 | break; 57 | } 58 | } 59 | 60 | private void refresh() { 61 | if (checkData()) return; 62 | mDataList.set(0, 7); 63 | mPagerAdapter.update(0, "更新数据源测试"); 64 | } 65 | 66 | private void add() { 67 | mDataList.add(7); 68 | mPagerAdapter.notifyDataSetChanged(); 69 | } 70 | 71 | private void delete() { 72 | if (checkData()) return; 73 | mPagerAdapter.remove(0); 74 | } 75 | 76 | private void clear() { 77 | if (checkData()) return; 78 | mDataList.clear(); 79 | mPagerAdapter.notifyDataSetChanged(); 80 | } 81 | 82 | private boolean checkData() { 83 | return mDataList.size() == 0; 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/FSPagerAdapterActivity.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.view.ViewPager; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | 8 | import com.diygreen.pageradapterrefresh.adapter.FSPagerAdapter; 9 | 10 | import java.util.LinkedList; 11 | import java.util.List; 12 | 13 | public class FSPagerAdapterActivity extends AppCompatActivity { 14 | private ViewPager mContentVP; 15 | 16 | private FSPagerAdapter mPagerAdapter; 17 | private List mDataList; 18 | 19 | @Override 20 | protected void onCreate(Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | setContentView(R.layout.activity_pageradapter); 23 | 24 | initView(); 25 | initData(); 26 | } 27 | 28 | private void initView() { 29 | this.mContentVP = (ViewPager) findViewById(R.id.vp_content); 30 | } 31 | 32 | private void initData() { 33 | mDataList = new LinkedList<>(); 34 | for (int i = 0; i < 6; i++) { 35 | mDataList.add(i); 36 | } 37 | 38 | mPagerAdapter = new FSPagerAdapter(getSupportFragmentManager(), mDataList); 39 | mContentVP.setAdapter(mPagerAdapter); 40 | } 41 | 42 | public void onClick(View v) { 43 | switch (v.getId()) { 44 | case R.id.btn_refresh: 45 | refresh(); 46 | break; 47 | case R.id.btn_add: 48 | add(); 49 | break; 50 | case R.id.btn_delete: 51 | delete(); 52 | break; 53 | case R.id.btn_clean: 54 | clear(); 55 | break; 56 | } 57 | } 58 | 59 | private void refresh() { 60 | if (checkData()) return; 61 | mDataList.set(0, 1); 62 | mPagerAdapter.updateData(mDataList); 63 | } 64 | 65 | private void add() { 66 | mDataList.add(7); 67 | mPagerAdapter.updateData(mDataList); 68 | } 69 | 70 | private void delete() { 71 | if (checkData()) return; 72 | mDataList.remove(0); 73 | mPagerAdapter.updateData(mDataList); 74 | } 75 | 76 | private void clear() { 77 | if (checkData()) return; 78 | mDataList.clear(); 79 | mPagerAdapter.updateData(mDataList); 80 | } 81 | 82 | private boolean checkData() { 83 | return mDataList.isEmpty(); 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.view.View; 8 | 9 | public class MainActivity extends AppCompatActivity { 10 | 11 | @Override 12 | protected void onCreate(Bundle savedInstanceState) { 13 | super.onCreate(savedInstanceState); 14 | setContentView(R.layout.activity_main); 15 | } 16 | 17 | public void onClick(View v) { 18 | switch (v.getId()) { 19 | case R.id.btn_simpledemo: 20 | overlay(SimpleDemoActivity.class); 21 | break; 22 | case R.id.btn_pageradapter: 23 | overlay(PagerAdapterActivity.class); 24 | break; 25 | case R.id.btn_fpageradapter1: 26 | overlay(FPagerAdapter1Activity.class); 27 | break; 28 | case R.id.btn_fpageradapter2: 29 | overlay(FPagerAdapter2Activity.class); 30 | break; 31 | case R.id.btn_fspageradapter: 32 | overlay(FSPagerAdapterActivity.class); 33 | break; 34 | } 35 | } 36 | 37 | private void overlay(Class clazz) { 38 | Intent intent = new Intent(MainActivity.this, clazz); 39 | startActivity(intent); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/PagerAdapterActivity.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.view.PagerAdapter; 5 | import android.support.v4.view.ViewPager; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.TextView; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | public class PagerAdapterActivity extends AppCompatActivity { 15 | 16 | private ViewPager mContentVP; 17 | 18 | private PagerAdapter mPagerAdapter; 19 | private List mDataList; 20 | 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | setContentView(R.layout.activity_pageradapter); 25 | 26 | initView(); 27 | initData(); 28 | } 29 | 30 | private void initView() { 31 | this.mContentVP = (ViewPager) findViewById(R.id.vp_content); 32 | } 33 | 34 | private void initData() { 35 | mDataList = new ArrayList<>(5); 36 | mDataList.add("Java"); 37 | mDataList.add("Android"); 38 | mDataList.add("C&C++"); 39 | mDataList.add("OC"); 40 | mDataList.add("Swift"); 41 | 42 | this.mContentVP.setAdapter(mPagerAdapter = new PagerAdapter() { 43 | @Override 44 | public int getCount() { 45 | return mDataList.size(); 46 | } 47 | 48 | @Override 49 | public boolean isViewFromObject(View view, Object object) { 50 | return view == object; 51 | } 52 | 53 | @Override 54 | public Object instantiateItem(ViewGroup container, int position) { 55 | View view = View.inflate(PagerAdapterActivity.this, R.layout.item_vp_demopageradapter, null); 56 | TextView pageNumTV = (TextView) view.findViewById(R.id.tv_pagenum); 57 | pageNumTV.setText("DIY-PageNum-" + mDataList.get(position)); 58 | container.addView(view); 59 | return view; 60 | } 61 | 62 | @Override 63 | public void destroyItem(ViewGroup container, int position, Object object) { 64 | container.removeView((View) object); 65 | } 66 | 67 | @Override 68 | public int getItemPosition(Object object) { 69 | // 解决数据源清空,Item 不销毁的 bug 70 | // return mDataList != null && mDataList.size()==0 ? POSITION_NONE : super.getItemPosition(object); 71 | 72 | // 最简单解决 notifyDataSetChanged() 页面不刷新问题的方法 73 | return POSITION_NONE; 74 | } 75 | }); 76 | } 77 | 78 | public void onClick(View v) { 79 | switch (v.getId()) { 80 | case R.id.btn_refresh: 81 | refresh(); 82 | break; 83 | case R.id.btn_add: 84 | add(); 85 | break; 86 | case R.id.btn_delete: 87 | delete(); 88 | break; 89 | case R.id.btn_clean: 90 | clear(); 91 | break; 92 | } 93 | } 94 | 95 | private void refresh() { 96 | if (checkData()) return; 97 | mDataList.set(0, "更新数据源测试"); 98 | mPagerAdapter.notifyDataSetChanged(); 99 | } 100 | 101 | private void add() { 102 | mDataList.add("这是新添加的Item"); 103 | mPagerAdapter.notifyDataSetChanged(); 104 | } 105 | 106 | private void delete() { 107 | if (checkData()) return; 108 | mDataList.remove(0); 109 | mPagerAdapter.notifyDataSetChanged(); 110 | } 111 | 112 | private void clear() { 113 | if (checkData()) return; 114 | mDataList.clear(); 115 | mPagerAdapter.notifyDataSetChanged(); 116 | } 117 | 118 | private boolean checkData() { 119 | return mDataList.size() == 0; 120 | } 121 | 122 | } 123 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/SimpleDemoActivity.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.view.PagerAdapter; 5 | import android.support.v4.view.ViewPager; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.TextView; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | public class SimpleDemoActivity extends AppCompatActivity { 15 | 16 | private ViewPager mContentVP; 17 | 18 | private PagerAdapter mPagerAdapter; 19 | private List mDataList; 20 | 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | setContentView(R.layout.activity_simpledemo); 25 | 26 | initView(); 27 | initData(); 28 | } 29 | 30 | private void initView() { 31 | this.mContentVP = (ViewPager) findViewById(R.id.vp_content); 32 | } 33 | 34 | private void initData() { 35 | mDataList = new ArrayList<>(5); 36 | mDataList.add("Java"); 37 | mDataList.add("Android"); 38 | mDataList.add("C&C++"); 39 | mDataList.add("OC"); 40 | mDataList.add("Swift"); 41 | 42 | // this.mContentVP.setAdapter(new DemoPagerAdapter(this, mDataList)); 43 | this.mContentVP.setAdapter(mPagerAdapter = new PagerAdapter() { 44 | @Override 45 | public int getCount() { 46 | return mDataList.size(); 47 | } 48 | 49 | @Override 50 | public boolean isViewFromObject(View view, Object object) { 51 | return view == object; 52 | } 53 | 54 | @Override 55 | public Object instantiateItem(ViewGroup container, int position) { 56 | View view = View.inflate(SimpleDemoActivity.this, R.layout.item_vp_demopageradapter, null); 57 | TextView pageNumTV = (TextView) view.findViewById(R.id.tv_pagenum); 58 | pageNumTV.setText("DIY-PageNum-" + mDataList.get(position)); 59 | container.addView(view); 60 | return view; 61 | } 62 | 63 | @Override 64 | public void destroyItem(ViewGroup container, int position, Object object) { 65 | container.removeView((View) object); 66 | } 67 | 68 | }); 69 | } 70 | 71 | public void onClick(View v) { 72 | switch (v.getId()) { 73 | case R.id.btn_refresh: 74 | refresh(); 75 | break; 76 | case R.id.btn_add: 77 | add(); 78 | break; 79 | case R.id.btn_delete: 80 | delete(); 81 | break; 82 | case R.id.btn_clean: 83 | clear(); 84 | break; 85 | } 86 | } 87 | 88 | private void refresh() { 89 | if (checkData()) return; 90 | mDataList.set(0, "更新数据源测试"); 91 | mPagerAdapter.notifyDataSetChanged(); 92 | } 93 | 94 | private void add() { 95 | mDataList.add("这是新添加的Item"); 96 | mPagerAdapter.notifyDataSetChanged(); 97 | } 98 | 99 | private void delete() { 100 | if (checkData()) return; 101 | mDataList.remove(0); 102 | mPagerAdapter.notifyDataSetChanged(); 103 | } 104 | 105 | private void clear() { 106 | if (checkData()) return; 107 | mDataList.clear(); 108 | mPagerAdapter.notifyDataSetChanged(); 109 | } 110 | 111 | private boolean checkData() { 112 | return mDataList.size() == 0; 113 | } 114 | 115 | } 116 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/adapter/APagerAdapter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 jiashuangkuaizi, Inc. 3 | */ 4 | package com.diygreen.pageradapterrefresh.adapter; 5 | 6 | import android.content.Context; 7 | import android.support.v4.view.PagerAdapter; 8 | import android.util.SparseArray; 9 | import android.view.LayoutInflater; 10 | import android.view.View; 11 | import android.view.ViewGroup; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * Description: 简单封装 PagerAdapter 17 | *
Program Name: 18 | *
Date: 2016年3月7日 19 | * 20 | * @author 李旺成 21 | * @version 1.0 22 | */ 23 | public abstract class APagerAdapter extends PagerAdapter { 24 | 25 | protected LayoutInflater mInflater; 26 | protected List mDataList; 27 | protected SparseArray mViewSparseArray; 28 | 29 | public APagerAdapter(Context context, List dataList) { 30 | mInflater = LayoutInflater.from(context); 31 | mDataList = dataList; 32 | mViewSparseArray = new SparseArray(dataList.size()); 33 | } 34 | 35 | @Override 36 | public int getCount() { 37 | if (mDataList == null) return 0; 38 | return mDataList.size(); 39 | } 40 | 41 | @Override 42 | public boolean isViewFromObject(View view, Object object) { 43 | return view == object; 44 | } 45 | 46 | @Override 47 | public Object instantiateItem(ViewGroup container, int position) { 48 | View view = mViewSparseArray.get(position); 49 | if (view == null) { 50 | view = getView(position); 51 | mViewSparseArray.put(position, view); 52 | } 53 | container.addView(view); 54 | return view; 55 | } 56 | 57 | @Override 58 | public void destroyItem(ViewGroup container, int position, Object object) { 59 | // container.removeView(mViewSparseArray.get(position)); 60 | container.removeView((View) object); 61 | } 62 | 63 | @Override 64 | public int getItemPosition(Object object) { 65 | return mDataList != null && mDataList.size()==0 ? POSITION_NONE : super.getItemPosition(object); 66 | } 67 | 68 | public abstract View getView(int position); 69 | 70 | public T getItem(int position) { 71 | return mDataList.get(position); 72 | } 73 | 74 | } -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/adapter/DemoPagerAdapter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 jiashuangkuaizi, Inc. 3 | */ 4 | package com.diygreen.pageradapterrefresh.adapter; 5 | 6 | import android.content.Context; 7 | import android.view.View; 8 | import android.widget.ImageView; 9 | import android.widget.TextView; 10 | 11 | import com.diygreen.pageradapterrefresh.R; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * Description: 17 | *
Program Name: 18 | *
Date: 2016年3月7日 19 | * 20 | * @author 李旺成 21 | * @version 1.0 22 | */ 23 | 24 | public class DemoPagerAdapter extends APagerAdapter { 25 | 26 | public DemoPagerAdapter(Context context, List dataList) { 27 | super(context, dataList); 28 | } 29 | 30 | @Override 31 | public View getView(int position) { 32 | View view = mInflater.inflate(R.layout.item_vp_demopageradapter, null); 33 | ImageView imgIV = (ImageView) view.findViewById(R.id.iv_img); 34 | TextView pageNumTV = (TextView) view.findViewById(R.id.tv_pagenum); 35 | if (mDataList != null && mDataList.size() > position && mDataList.get(position) != null) { 36 | pageNumTV.setText("DIY-PageNum-" + mDataList.get(position)); 37 | } else { 38 | pageNumTV.setText("DIY-PageNum-" + position); 39 | } 40 | mViewSparseArray.put(position, view); 41 | return view; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/adapter/FPagerAdapter1.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh.adapter; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentPagerAdapter; 6 | import android.support.v4.app.FragmentTransaction; 7 | import android.util.Log; 8 | 9 | import com.diygreen.pageradapterrefresh.fragment.FragmentTest; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | public class FPagerAdapter1 extends FragmentPagerAdapter { 15 | 16 | private ArrayList mFragmentList; 17 | private FragmentManager mFragmentManager; 18 | 19 | public FPagerAdapter1(FragmentManager fm, List types) { 20 | super(fm); 21 | this.mFragmentManager = fm; 22 | mFragmentList = new ArrayList<>(); 23 | for (int i = 0, size = types.size(); i < size; i++) { 24 | mFragmentList.add(FragmentTest.instance(i)); 25 | } 26 | setFragments(mFragmentList); 27 | } 28 | 29 | public void updateData(List dataList) { 30 | ArrayList fragments = new ArrayList<>(); 31 | for (int i = 0, size = dataList.size(); i < size; i++) { 32 | Log.e("FPagerAdapter1", dataList.get(i).toString()); 33 | fragments.add(FragmentTest.instance(dataList.get(i))); 34 | } 35 | setFragments(fragments); 36 | } 37 | 38 | private void setFragments(ArrayList mFragmentList) { 39 | if(this.mFragmentList != null){ 40 | FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 41 | for(Fragment f:this.mFragmentList){ 42 | fragmentTransaction.remove(f); 43 | } 44 | fragmentTransaction.commit(); 45 | mFragmentManager.executePendingTransactions(); 46 | } 47 | this.mFragmentList = mFragmentList; 48 | notifyDataSetChanged(); 49 | } 50 | 51 | @Override 52 | public int getCount() { 53 | return this.mFragmentList.size(); 54 | } 55 | 56 | public int getItemPosition(Object object) { 57 | return POSITION_NONE; 58 | } 59 | 60 | @Override 61 | public Fragment getItem(int position) { 62 | return mFragmentList.get(position); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/adapter/FPagerAdapter11.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh.adapter; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentStatePagerAdapter; 6 | import android.support.v4.app.FragmentTransaction; 7 | import android.util.Log; 8 | 9 | import com.diygreen.pageradapterrefresh.fragment.FragmentTest; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | public class FPagerAdapter11 extends FragmentStatePagerAdapter { 15 | 16 | private ArrayList mFragmentList; 17 | private FragmentManager mFragmentManager; 18 | 19 | public FPagerAdapter11(FragmentManager fm, List types) { 20 | super(fm); 21 | this.mFragmentManager = fm; 22 | mFragmentList = new ArrayList<>(); 23 | for (int i = 0, size = types.size(); i < size; i++) { 24 | mFragmentList.add(FragmentTest.instance(i)); 25 | } 26 | setFragments(mFragmentList); 27 | } 28 | 29 | public void updateData(List dataList) { 30 | ArrayList fragments = new ArrayList<>(); 31 | for (int i = 0, size = dataList.size(); i < size; i++) { 32 | Log.e("FPagerAdapter1", dataList.get(i).toString()); 33 | fragments.add(FragmentTest.instance(dataList.get(i))); 34 | } 35 | setFragments(fragments); 36 | } 37 | 38 | private void setFragments(ArrayList mFragmentList) { 39 | if(this.mFragmentList != null){ 40 | FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 41 | for(Fragment f:this.mFragmentList){ 42 | fragmentTransaction.remove(f); 43 | } 44 | fragmentTransaction.commit(); 45 | mFragmentManager.executePendingTransactions(); 46 | } 47 | this.mFragmentList = mFragmentList; 48 | notifyDataSetChanged(); 49 | } 50 | 51 | @Override 52 | public int getCount() { 53 | return this.mFragmentList.size(); 54 | } 55 | 56 | public int getItemPosition(Object object) { 57 | return POSITION_NONE; 58 | } 59 | 60 | @Override 61 | public Fragment getItem(int position) { 62 | return mFragmentList.get(position); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/adapter/FPagerAdapter2.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh.adapter; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentPagerAdapter; 6 | import android.support.v4.app.FragmentTransaction; 7 | import android.view.ViewGroup; 8 | 9 | import com.diygreen.pageradapterrefresh.fragment.FragmentTest; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | public class FPagerAdapter2 extends FragmentPagerAdapter { 15 | 16 | private FragmentManager mFragmentManager; 17 | private List mDataList; 18 | private List mTagList; 19 | private boolean isDataSetChange; 20 | 21 | public FPagerAdapter2(FragmentManager fragmentManager, List dataList) { 22 | super(fragmentManager); 23 | this.mFragmentManager = fragmentManager; 24 | this.mDataList = dataList; 25 | this.mTagList = new ArrayList<>(); 26 | } 27 | 28 | @Override 29 | public CharSequence getPageTitle(int position) { 30 | return "DIY-" + mDataList.get(position); 31 | } 32 | 33 | @Override 34 | public int getCount() { 35 | return mDataList.size(); 36 | } 37 | 38 | @Override 39 | public Fragment getItem(int position) { 40 | return FragmentTest.instance(mDataList.get(position)); 41 | } 42 | 43 | @Override 44 | public Object instantiateItem(ViewGroup container, int position) { 45 | mTagList.add(position, makeFragmentName(container.getId(), 46 | (int) getItemId(position))); 47 | return super.instantiateItem(container, position); 48 | } 49 | 50 | @Override 51 | public int getItemPosition(Object object) { 52 | // 解决数据源清空,Item 不销毁的 bug 53 | return isDataSetChange || (mDataList != null && mDataList.size()==0) ? POSITION_NONE : super.getItemPosition(object); 54 | } 55 | 56 | // FragmentPageAdapter源码里给 Fragment 生成标签的方法 57 | private String makeFragmentName(int viewId, int index) { 58 | return "android:switcher:" + viewId + ":" + index; 59 | } 60 | 61 | public void update(int position, String str) { 62 | Fragment fragment = mFragmentManager.findFragmentByTag(mTagList.get(position)); 63 | if (fragment == null) return; 64 | if (fragment instanceof FragmentTest) { 65 | ((FragmentTest)fragment).update(str); 66 | } 67 | notifyDataSetChanged(); 68 | } 69 | 70 | public void remove(int position) { 71 | mDataList.remove(position); 72 | isDataSetChange = true; 73 | Fragment fragment = mFragmentManager.findFragmentByTag(mTagList.get(position)); 74 | mTagList.remove(position); 75 | if (fragment == null) { 76 | notifyDataSetChanged(); 77 | return; 78 | } 79 | FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 80 | fragmentTransaction.remove(fragment); 81 | fragmentTransaction.commit(); 82 | mFragmentManager.executePendingTransactions(); 83 | notifyDataSetChanged(); 84 | } 85 | 86 | } -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/adapter/FSPagerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.diygreen.pageradapterrefresh.adapter; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentStatePagerAdapter; 6 | import android.util.Log; 7 | 8 | import com.diygreen.pageradapterrefresh.fragment.FragmentTest; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | public class FSPagerAdapter extends FragmentStatePagerAdapter { 14 | 15 | private ArrayList mFragmentList; 16 | 17 | public FSPagerAdapter(FragmentManager fm, List types) { 18 | super(fm); 19 | updateData(types); 20 | } 21 | 22 | public void updateData(List dataList) { 23 | ArrayList fragments = new ArrayList<>(); 24 | for (int i = 0, size = dataList.size(); i < size; i++) { 25 | Log.e("FPagerAdapter1", dataList.get(i).toString()); 26 | fragments.add(FragmentTest.instance(dataList.get(i))); 27 | } 28 | setFragmentList(fragments); 29 | } 30 | 31 | private void setFragmentList(ArrayList fragmentList) { 32 | if(this.mFragmentList != null){ 33 | mFragmentList.clear(); 34 | } 35 | this.mFragmentList = fragmentList; 36 | notifyDataSetChanged(); 37 | } 38 | 39 | @Override 40 | public int getCount() { 41 | return this.mFragmentList.size(); 42 | } 43 | 44 | public int getItemPosition(Object object) { 45 | return POSITION_NONE; 46 | } 47 | 48 | @Override 49 | public Fragment getItem(int position) { 50 | return mFragmentList.get(position); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/diygreen/pageradapterrefresh/fragment/FragmentTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 jiashuangkuaizi, Inc. 3 | */ 4 | package com.diygreen.pageradapterrefresh.fragment; 5 | 6 | 7 | import android.app.Activity; 8 | import android.os.Bundle; 9 | import android.os.Handler; 10 | import android.support.v4.app.Fragment; 11 | import android.util.Log; 12 | import android.view.LayoutInflater; 13 | import android.view.View; 14 | import android.view.ViewGroup; 15 | import android.widget.EditText; 16 | import android.widget.TextView; 17 | 18 | import com.diygreen.pageradapterrefresh.R; 19 | 20 | /** 21 | * Description: 22 | *
Program Name: 回家吃饭Android开发最佳实践 23 | *
Date: 2016年5月4日 24 | * 25 | * @author 李旺成 liwangcheng@jiashuangkuaizi.com 26 | * @version 1.0 27 | */ 28 | 29 | public class FragmentTest extends Fragment { 30 | 31 | private TextView mShowTV; 32 | private String mCharStr; 33 | 34 | public FragmentTest() {} 35 | 36 | public FragmentTest(String charStr) { 37 | super(); 38 | this.mCharStr = charStr; 39 | } 40 | 41 | public static FragmentTest instance(int type) { 42 | String charStr = ""; 43 | switch (type) { 44 | case 0: 45 | charStr = "AAAAAAAAAA"; 46 | break; 47 | case 1: 48 | charStr = "BBBBBBBBBB"; 49 | break; 50 | case 2: 51 | charStr = "CCCCCCCCCC"; 52 | break; 53 | case 3: 54 | charStr = "DDDDDDDDDD"; 55 | break; 56 | default: 57 | charStr = "XXXXXXXXXX"; 58 | break; 59 | } 60 | Log.e("FragmentTest", charStr); 61 | return new FragmentTest(charStr); 62 | } 63 | 64 | @Override 65 | public void onAttach(Activity activity) { 66 | super.onAttach(activity); 67 | System.out.println(mCharStr + "____onAttach"); 68 | } 69 | 70 | @Override 71 | public void onCreate(Bundle savedInstanceState) { 72 | super.onCreate(savedInstanceState); 73 | System.out.println(mCharStr+"____onCreate"); 74 | } 75 | 76 | @Override 77 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 78 | System.out.println(mCharStr+"____onCreateView"); 79 | View view = inflater.inflate(R.layout.fragment_test, 80 | container, false); 81 | mShowTV = (TextView) view.findViewById(R.id.hello); 82 | final EditText et = (EditText) view.findViewById(R.id.edit); 83 | mShowTV.setText(mCharStr); 84 | new Handler().postDelayed(new Runnable() { 85 | @Override 86 | public void run() { 87 | et.setText(mCharStr); 88 | } 89 | }, 5*1000); 90 | return view; 91 | } 92 | 93 | public void update(String str) { 94 | if (mShowTV != null) { 95 | mShowTV.setText(str); 96 | } 97 | } 98 | 99 | @Override 100 | public void onActivityCreated(Bundle savedInstanceState) { 101 | super.onActivityCreated(savedInstanceState); 102 | System.out.println(mCharStr+"____onActivityCreated"); 103 | } 104 | 105 | @Override 106 | public void onStart() { 107 | super.onStart(); 108 | System.out.println(mCharStr+"____onStart"); 109 | } 110 | 111 | @Override 112 | public void onResume() { 113 | super.onResume(); 114 | System.out.println(mCharStr+"____onResume"); 115 | } 116 | 117 | @Override 118 | public void onPause() { 119 | super.onPause(); 120 | System.out.println(mCharStr+"____onPause"); 121 | } 122 | 123 | @Override 124 | public void onStop() { 125 | super.onStop(); 126 | System.out.println(mCharStr+"____onStop"); 127 | } 128 | 129 | @Override 130 | public void onDestroyView() { 131 | super.onDestroyView(); 132 | System.out.println(mCharStr+"____onDestroyView"); 133 | } 134 | 135 | @Override 136 | public void onDestroy() { 137 | super.onDestroy(); 138 | System.out.println(mCharStr+"____onDestroy"); 139 | } 140 | 141 | @Override 142 | public void onDetach() { 143 | super.onDetach(); 144 | System.out.println(mCharStr+"____onDetach"); 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 18 | 19 |