Android——ViewPager+Fragment+ListView之间

Android——ViewPager+Fragment+ListView之间

源码下载地址: https://github.com/kkman2008/viewpagerSample

 
  1. <span style="font-size:18px;">package com.example.jreduch05;

  2.  
  3. import android.os.Bundle;

  4. import android.support.v4.app.Fragment;

  5. import android.support.v4.view.ViewPager;

  6. import android.support.v7.app.AppCompatActivity;

  7.  
  8. import com.astuetz.PagerSlidingTabStrip;

  9. import com.example.jreduch05.adapter.MyVpFragmentAdapter;

  10. import com.example.jreduch05.fragment.VpFragmentLv;

  11.  
  12. import java.util.ArrayList;

  13. import java.util.List;

  14.  
  15. public class VpFragmentLvActivity extends AppCompatActivity {

  16. private ViewPager vp;

  17. private PagerSlidingTabStrip pst;

  18.  
  19. @Override

  20. protected void onCreate(Bundle savedInstanceState) {

  21. super.onCreate(savedInstanceState);

  22. setContentView(R.layout.activity_vp_fragment_lv);

  23. getSupportActionBar().hide();

  24. vp=(ViewPager)findViewById(R.id.vp);

  25. pst= (PagerSlidingTabStrip) findViewById(R.id.pst);

  26. List<Fragment> list=new ArrayList<>();

  27. List<String> titles=new ArrayList<>();

  28.  
  29. titles.add("推荐");

  30. titles.add("热点");

  31. titles.add("烟台");

  32. titles.add("视频");

  33. titles.add("订阅");

  34. titles.add("体育");

  35. titles.add("娱乐");

  36. titles.add("奥运");

  37. titles.add("财经");

  38. titles.add("国际");

  39. for (int i=1;i<=10;i++){

  40.  
  41. Fragment fragment=new VpFragmentLv();

  42. Bundle bundle=new Bundle();

  43. bundle.putInt("arg",i);

  44. fragment.setArguments(bundle);

  45. list.add(fragment);

  46. }

  47.  
  48. MyVpFragmentAdapter ma=new MyVpFragmentAdapter(

  49. getSupportFragmentManager(),list,titles);

  50.  
  51.  
  52. vp.setAdapter(ma);

  53.  
  54. pst.setIndicatorColor(getResources().getColor(R.color.colorPrimary));

  55. pst.setIndicatorHeight(5);

  56. pst.setAllCaps(true);

  57. pst.setShouldExpand(true);//平分

  58. pst.setTextColor(getResources().getColor(R.color.colorAccent));

  59.  
  60.  
  61. pst.setViewPager(vp);

  62.  
  63. }

  64. }

  65. </span>

 
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  3. android:orientation="vertical" android:layout_width="match_parent"

  4. android:layout_height="match_parent">

  5. <RelativeLayout

  6. android:layout_width="match_parent"

  7. android:layout_height="50dp"

  8. android:background="#ef4848"

  9. android:id="@+id/rr"

  10. >

  11.  
  12.  
  13. <TextView

  14. android:layout_width="wrap_content"

  15. android:layout_height="wrap_content"

  16. android:layout_weight="1"

  17. android:gravity="center"

  18. android:text="今日头条@"

  19. android:textSize="26sp"

  20. android:textColor="#ffffff"

  21. android:layout_alignParentEnd="true"

  22. android:layout_alignParentStart="true"

  23. android:layout_alignParentTop="true"

  24. android:layout_alignParentBottom="true" />

  25.  
  26. <ImageView

  27. android:layout_width="wrap_content"

  28. android:layout_height="wrap_content"

  29. android:src="@mipmap/base_main_action_personal_normal"

  30. android:id="@+id/imageView"

  31. android:layout_alignParentStart="true"

  32. android:layout_alignParentTop="true"

  33. android:layout_alignParentBottom="true" />

  34.  
  35. <ImageView

  36. android:layout_width="wrap_content"

  37. android:layout_height="wrap_content"

  38. android:src="@mipmap/right_drawer_normal"

  39. android:id="@+id/imageView2"

  40. android:layout_alignParentTop="true"

  41. android:layout_alignParentEnd="true"

  42. android:layout_alignParentBottom="true" />

  43.  
  44. </RelativeLayout>

  45.  
  46.  
  47. <com.astuetz.PagerSlidingTabStrip

  48. android:layout_width="match_parent"

  49. android:layout_height="50dp"

  50. android:id="@+id/pst"

  51. android:layout_below="@+id/rr"

  52. ></com.astuetz.PagerSlidingTabStrip>

  53. <LinearLayout

  54. android:layout_width="match_parent"

  55. android:layout_height="wrap_content"

  56. android:orientation="horizontal"

  57. android:layout_below="@+id/pst"

  58. android:id="@+id/ll"

  59. >

  60. <TextView

  61. android:layout_width="wrap_content"

  62. android:layout_height="30dp"

  63. android:text="2016.08.09"

  64. android:layout_marginLeft="20dp"

  65. />

  66. <TextView

  67. android:layout_width="wrap_content"

  68. android:layout_height="30dp"

  69. android:text="星期二"

  70. android:layout_marginLeft="50dp"

  71. />

  72. <TextView

  73. android:layout_width="wrap_content"

  74. android:layout_height="30dp"

  75. android:text="今天"

  76. android:layout_marginLeft="120dp"

  77. />

  78. </LinearLayout>

  79. <android.support.v4.view.ViewPager

  80. android:layout_width="match_parent"

  81. android:layout_height="wrap_content"

  82. android:id="@+id/vp"

  83. android:layout_below="@+id/ll"

  84. ></android.support.v4.view.ViewPager>

  85. </RelativeLayout>

 
  1. package com.example.jreduch05.fragment;

  2.  
  3.  
  4. import android.content.Intent;

  5. import android.os.Bundle;

  6. import android.support.annotation.Nullable;

  7. import android.support.v4.app.Fragment;

  8. import android.view.LayoutInflater;

  9. import android.view.View;

  10. import android.view.ViewGroup;

  11. import android.widget.AdapterView;

  12. import android.widget.ListView;

  13.  
  14. import com.example.jreduch05.IntentActivity;

  15. import com.example.jreduch05.R;

  16. import com.example.jreduch05.adapter.MyListAdapter;

  17. import com.example.jreduch05.entity.News;

  18.  
  19. import java.util.ArrayList;

  20. import java.util.List;

  21.  
  22. /**

  23. * A simple {@link Fragment} subclass.

  24. */

  25. public class VpFragmentLv extends Fragment {

  26.  
  27.  
  28. public VpFragmentLv() {

  29. // Required empty public constructor

  30. }

  31.  
  32.  
  33. @Override

  34. public View onCreateView(LayoutInflater inflater, ViewGroup container,

  35. Bundle savedInstanceState) {

  36. // Inflate the layout for this fragment

  37. return inflater.inflate(R.layout.fragment_vp_fragment_lv, container, false);

  38. }

  39.  
  40. @Override

  41. public void onActivityCreated (@Nullable Bundle savedInstanceState){

  42. super.onActivityCreated(savedInstanceState);

  43. // TextView tv=(TextView)getView().findViewById(R.id.tv);

  44. ListView lv = (ListView) getView().findViewById(R.id.lv);

  45. final List<News> list = new ArrayList<>();

  46. MyListAdapter ma = new MyListAdapter(list, getActivity());

  47. lv.setAdapter(ma);

  48.  
  49. final Bundle bundle = getArguments();

  50.  
  51. lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

  52. @Override

  53. public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

  54. News news = list.get(i);

  55. Intent intent = new Intent(getActivity(), IntentActivity.class);

  56. intent.putExtra("obj", news);

  57. Bundle b1 = new Bundle();

  58. b1.putString("arg1", "今天七月七");

  59. intent.putExtra("bundle", b1);

  60.  
  61. startActivity(intent);

  62. }

  63. });

  64. if (bundle != null) {

  65. int arg = bundle.getInt("arg");

  66. // tv.setText("我是Fagment"+arg);

  67. switch (arg) {

  68. case 1:

  69. for (int i = 0; i < 20; i++) {

  70. list.add(new News("体育新闻" + i, "今天", "0001", R.mipmap.zyfzyf, "新浪网"));

  71. ma.notifyDataSetChanged();

  72. }

  73. break;

  74. case 2:

  75. for (int i = 0; i < 20; i++) {

  76. list.add(new News("烟台新闻" + i, "今天", "0002", R.mipmap.zyf, "新浪网"));

  77. ma.notifyDataSetChanged();

  78. }

  79. break;

  80.  
  81. case 3:

  82. for (int i = 0; i < 20; i++) {

  83. list.add(new News("奥运新闻" + i, "今天", "0002", R.mipmap.zz, "新浪网"));

  84. ma.notifyDataSetChanged();

  85. }

  86. break;

  87.  
  88. }

  89.  
  90.  
  91. }

  92. }

  93. }

 
  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

  2. xmlns:tools="http://schemas.android.com/tools"

  3. android:layout_width="match_parent"

  4. android:layout_height="match_parent"

  5. tools:context="com.example.jreduch05.fragment.VpFragmentLv">

  6.  
  7. <!-- TODO: Update blank fragment layout -->

  8. <ListView

  9. android:layout_width="match_parent"

  10. android:layout_height="match_parent"

  11. android:id="@+id/lv"

  12. >

  13.  
  14. </ListView>

  15.  
  16. </FrameLayout>

 
  1. package com.example.jreduch05.entity;

  2.  
  3. import android.os.Parcel;

  4. import android.os.Parcelable;

  5.  
  6. import java.io.Serializable;

  7.  
  8. /**

  9. * Created by 冲天之峰 on 2016/8/9.

  10. */

  11. //implements Serializable 接口

  12.  
  13. //Parcelable Android 独有的

  14. public class News implements Parcelable{

  15.  
  16. private String title;

  17. private String pubDate;

  18. // private String newId;

  19. private int img;

  20. private String from;

  21.  
  22. public News(String title, String pubDate, String newId, int img, String from) {

  23. this.title = title;

  24. this.pubDate = pubDate;

  25. // this.newId = newId;

  26. this.img = img;

  27. this.from = from;

  28. }

  29.  
  30. protected News(Parcel in) {

  31. title = in.readString();

  32. pubDate = in.readString();

  33. img = in.readInt();

  34. from = in.readString();

  35. }

  36.  
  37. public static final Creator<News> CREATOR = new Creator<News>() {

  38. @Override

  39. public News createFromParcel(Parcel in) {

  40. return new News(in);

  41. }

  42.  
  43. @Override

  44. public News[] newArray(int size) {

  45. return new News[size];

  46. }

  47. };

  48.  
  49. public String getTitle() {

  50. return title;

  51. }

  52.  
  53. public void setTitle(String title) {

  54. this.title = title;

  55. }

  56.  
  57. public String getFrom() {

  58. return from;

  59. }

  60.  
  61. public void setFrom(String from) {

  62. this.from = from;

  63. }

  64.  
  65. public int getImg() {

  66. return img;

  67. }

  68.  
  69. public void setImg(int img) {

  70. this.img = img;

  71. }

  72.  
  73. // public String getNewId() {

  74. // return newId;

  75. // }

  76. //

  77. // public void setNewId(String newId) {

  78. // this.newId = newId;

  79. // }

  80.  
  81. public String getPubDate() {

  82. return pubDate;

  83. }

  84.  
  85. public void setPubDate(String pubDate) {

  86. this.pubDate = pubDate;

  87. }

  88.  
  89. @Override

  90. public int describeContents() {

  91. return 0;

  92. }

  93.  
  94. @Override

  95. public void writeToParcel(Parcel parcel, int i) {

  96. parcel.writeString(title);

  97. parcel.writeString(pubDate);

  98. parcel.writeInt(img);

  99. parcel.writeString(from);

  100. }

  101. }

 
  1. package com.example.jreduch05.adapter;

  2.  
  3. import android.support.v4.app.Fragment;

  4. import android.support.v4.app.FragmentManager;

  5. import android.support.v4.app.FragmentPagerAdapter;

  6.  
  7. import java.util.List;

  8.  
  9. /**

  10. * Created by 冲天之峰 on 2016/8/9.

  11. */

  12. public class MyVpFragmentAdapter extends FragmentPagerAdapter {

  13. private List<Fragment> list;

  14. private List<String> titles;

  15. public MyVpFragmentAdapter(FragmentManager fm, List<Fragment> list, List<String> titles) {

  16. super(fm);

  17. this.list= list;

  18. this.titles= titles;

  19. }

  20.  
  21. @Override

  22. public Fragment getItem(int position) {

  23. return list.get(position);

  24. }

  25.  
  26. @Override

  27. public int getCount() {

  28. return list.size();

  29. }

  30.  
  31. @Override

  32. public CharSequence getPageTitle(int position) {

  33. return titles.get(position);

  34. }

  35. }



 

 
  1. package com.example.jreduch05;

  2.  
  3. import android.support.v4.app.Fragment;

  4. import android.support.v4.app.FragmentTabHost;

  5. import android.support.v4.view.ViewPager;

  6. import android.support.v7.app.AppCompatActivity;

  7. import android.os.Bundle;

  8. import android.view.View;

  9. import android.widget.ImageView;

  10. import android.widget.TabHost;

  11. import android.widget.TextView;

  12.  
  13. import com.example.jreduch05.adapter.MyTabHostAdapter;

  14. import com.example.jreduch05.fragment.TabHostFragment;

  15.  
  16. import java.util.ArrayList;

  17. import java.util.List;

  18.  
  19. public class FragmentTabHostActivity extends AppCompatActivity {

  20. private ViewPager vp;

  21. private FragmentTabHost ft;

  22. private String[] str={"首页","消息","更多","好友","搜索"};

  23. private int[] imgRes={R.drawable.home,

  24. R.drawable.meassage,R.drawable.more,R.drawable.selfinfo,R.drawable.square};

  25. @Override

  26. protected void onCreate(Bundle savedInstanceState) {

  27. super.onCreate(savedInstanceState);

  28. setContentView(R.layout.activity_fragment_tab_host);

  29. vp=(ViewPager)findViewById(R.id.vp);

  30. ft=(FragmentTabHost)findViewById(R.id.ft);

  31.  
  32. init();

  33. }

  34.  
  35. private void init() {

  36.  
  37. List<Fragment> list=new ArrayList<>();

  38.  
  39. //

  40. ft.setup(this,getSupportFragmentManager());

  41. for(int i=0;i<str.length;i++){

  42.  
  43.  
  44. Fragment fragment=new TabHostFragment();

  45. Bundle bundle=new Bundle();

  46. bundle.putInt("arg",i);

  47. TabHost.TabSpec tabSpec=ft.newTabSpec(str[i]).setIndicator(getView(i));

  48.  
  49.  
  50. fragment.setArguments(bundle);

  51. ft.addTab(tabSpec,fragment.getClass(),null);

  52. list.add(fragment);

  53.  
  54. }

  55. MyTabHostAdapter mha=new MyTabHostAdapter(getSupportFragmentManager(),list);

  56.  
  57. vp.setAdapter(mha);

  58. ft.setOnTabChangedListener(new TabHost.OnTabChangeListener() {

  59. @Override

  60. public void onTabChanged(String s) {

  61. vp.setCurrentItem(ft.getCurrentTab());

  62. }

  63. });

  64. vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

  65. @Override

  66. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

  67.  
  68. }

  69.  
  70. @Override

  71. public void onPageSelected(int position) {

  72. ft.setCurrentTab(position);

  73. }

  74.  
  75. @Override

  76. public void onPageScrollStateChanged(int state) {

  77.  
  78. }

  79. });

  80. }

  81. public View getView(int i){

  82. View v=getLayoutInflater().inflate(R.layout.tab_layout,null);

  83. ImageView iv=(ImageView)v.findViewById(R.id.iv);

  84. iv.setImageResource(imgRes[i]);

  85. TextView tv=(TextView)v.findViewById(R.id.tv);

  86. tv.setText(str[i]);

  87.  
  88. return v;

  89. }

  90. }

 
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  3. xmlns:tools="http://schemas.android.com/tools"

  4. android:layout_width="match_parent"

  5. android:layout_height="match_parent"

  6. android:orientation="vertical"

  7. tools:context="com.example.jreduch05.FragmentTabHostActivity">

  8. <android.support.v4.view.ViewPager

  9. android:layout_width="match_parent"

  10. android:layout_height="0dp"

  11. android:layout_weight="1"

  12. android:id="@+id/vp"

  13. ></android.support.v4.view.ViewPager>

  14.  
  15. <android.support.v4.app.FragmentTabHost

  16. android:layout_width="match_parent"

  17. android:layout_height="wrap_content"

  18. android:id="@+id/ft"

  19. ></android.support.v4.app.FragmentTabHost>

  20. </LinearLayout>

 
  1. package com.example.jreduch05.fragment;

  2.  
  3.  
  4. import android.os.Bundle;

  5. import android.support.annotation.Nullable;

  6. import android.support.v4.app.Fragment;

  7. import android.view.LayoutInflater;

  8. import android.view.View;

  9. import android.view.ViewGroup;

  10. import android.widget.TextView;

  11.  
  12. import com.example.jreduch05.R;

  13.  
  14. /**

  15. * A simple {@link Fragment} subclass.

  16. */

  17. public class TabHostFragment extends Fragment {

  18.  
  19.  
  20. public TabHostFragment() {

  21. // Required empty public constructor

  22. }

  23.  
  24.  
  25. @Override

  26. public View onCreateView(LayoutInflater inflater, ViewGroup container,

  27. Bundle savedInstanceState) {

  28. // Inflate the layout for this fragment

  29. return inflater.inflate(R.layout.fragment_tab_host, container, false);

  30. }

  31.  
  32. @Override

  33. public void onActivityCreated(@Nullable Bundle savedInstanceState) {

  34. super.onActivityCreated(savedInstanceState);

  35. TextView tv=(TextView)getView().findViewById(R.id.tv);

  36. Bundle bundle=getArguments();

  37. if (bundle!=null){

  38. int arg=bundle.getInt("arg");

  39. tv.setText("我是Fragment"+(arg+1));

  40. }

  41. }

  42. }

 
  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

  2. xmlns:tools="http://schemas.android.com/tools"

  3. android:layout_width="match_parent"

  4. android:layout_height="match_parent"

  5. tools:context="com.example.jreduch05.fragment.TabHostFragment">

  6.  
  7. <!-- TODO: Update blank fragment layout -->

  8. <TextView

  9. android:layout_width="match_parent"

  10. android:layout_height="match_parent"

  11. android:text="@string/hello_blank_fragment"

  12. android:id="@+id/tv"

  13. android:gravity="center"

  14. />

  15.  
  16. </FrameLayout>

 
  1. package com.example.jreduch05.adapter;

  2.  
  3. import android.support.v4.app.Fragment;

  4. import android.support.v4.app.FragmentManager;

  5. import android.support.v4.app.FragmentPagerAdapter;

  6.  
  7. import java.util.List;

  8.  
  9. /**

  10. * Created by 冲天之峰 on 2016/8/9.

  11. */

  12. public class MyTabHostAdapter extends FragmentPagerAdapter {

  13. private List<Fragment> list;

  14. public MyTabHostAdapter(FragmentManager fm, List<Fragment> list) {

  15. super(fm);

  16. this.list= list;

  17. }

  18.  
  19. @Override

  20. public Fragment getItem(int position) {

  21. return list.get(position);

  22. }

  23.  
  24. @Override

  25. public int getCount() {

  26. return list.size();

  27. }

  28. }

 
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">

  3. <item android:drawable="@mipmap/icon_home_sel"

  4. android:state_selected="true"></item>

  5. <item android:drawable="@mipmap/icon_home_nor"></item>

  6.  
  7. </selector>


猜你喜欢

转载自blog.csdn.net/kingmax54212008/article/details/82624038