首先看一下 Fragmen的生命週期如圖所示
Fragment調用的方法以及說明
onAttach () Fragment被附加到Activity的時,調用此函數,在這個方法中可以獲得宿主Activity。
onCreate () Fragment被創建的時,調用此函數。
onCreateView () Fragment的佈局加載時,調用此函數。
onActivityCreated () 當宿主Activity啓動完畢後,調用此函數。
onStart () 啓動Fragment時,調用此函數。
onResume () Fragment恢復時,調用此函數。
onPause () Fragment暫停時,調用此函數。
onStop() Fragment停止時,調用此函數。
onDestroyView() 銷燬Fragment中的View控件時,調用此函數。
onDestroy() 銷燬Fragment時,調用此函數。
onDetach() Fragment從Activity脫離時,調用此函數
Fragment在Activity裏面的生命週期
ListView&ViewPager&Fragment以及第三方組件PagerSlidingTabString聯合使用
程序如下
FragmentPagerActivit程序
package com.jeredu.administrator.classday11application;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.astuetz.PagerSlidingTabStrip;
import com.jeredu.administrator.classday11application.adapter.MyFragmentAdapter;
import com.jeredu.administrator.classday11application.fragment.pagerFragment;
import java.util.ArrayList;
import java.util.List;
public class FragmentPagerActivity extends AppCompatActivity {
private ViewPager vp;
private PagerSlidingTabStrip pst;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_fragment_pager);
vp = (ViewPager) findViewById(R.id.vp);
pst = (PagerSlidingTabStrip) findViewById(R.id.pst);
List<Fragment> list =new ArrayList<>();
List<String> title = new ArrayList<>();
title.add("體育");
title.add("娛樂");
title.add("奧運");
title.add("財經");
title.add("國際");
for (int i=1;i<=5;i++){
Fragment fragment = new pagerFragment();
Bundle bundle = new Bundle();
bundle.putInt("arg",i);
fragment.setArguments(bundle);
list.add(fragment);
}
MyFragmentAdapter ma =new MyFragmentAdapter(getSupportFragmentManager(),list,title);
vp.setAdapter(ma);//調用適配器
pst.setIndicatorColor(getResources().getColor(R.color.colorAccent));
pst.setIndicatorHeight(5);//條的高度
pst.setTextColor(getResources().getColor(R.color.colorPrimary));//文字顏色
pst.setTabBackground(R.mipmap.ic_launcher);//文字背景圖片
pst.setShouldExpand(true);//是否平分
pst.setViewPager(vp);
}
}
佈局文件<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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.jeredu.administrator.classday11application.FragmentPagerActivity">
<com.astuetz.PagerSlidingTabStrip
android:layout_width="match_parent"
android:layout_height="20dp"
android:id="@+id/pst"></com.astuetz.PagerSlidingTabStrip>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/vp"
android:layout_below="@+id/pst">
</android.support.v4.view.ViewPager>
</RelativeLayout>
pagerFragment程序
<span style="font-size:12px;">package com.jeredu.administrator.classday11application.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import com.jeredu.administrator.classday11application.IntentActivity;
import com.jeredu.administrator.classday11application.R;
import com.jeredu.administrator.classday11application.adapter.MyListAdapter;
import com.jeredu.administrator.classday11application.adapter.News;
import java.util.ArrayList;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
*/
public class pagerFragment extends Fragment {
public pagerFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_pager, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ListView lv = (ListView) getView().findViewById(R.id.lv);
final List<News> list = new ArrayList<>();
MyListAdapter myListAdapter =new MyListAdapter(list,getActivity());
lv.setAdapter(myListAdapter);
final Bundle bundle = getArguments();
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
News news =list.get(i);
Intent intent = new Intent(getActivity(), IntentActivity.class);
intent.putExtra("obj", news);
Bundle b1=new Bundle();
b1.putString("arg1","今天是七月七七夕節");
intent.putExtra("bundle",b1);
startActivity(intent);
}
});
if(bundle!=null){
int arg = bundle.getInt("arg");
switch (arg){
case 1:
for (int i=0;i<20;i++){
list.add(new News(R.mipmap.ic_launcher,"體育新聞 "+i,"今天","新浪網"));
}
myListAdapter.notifyDataSetChanged();
break;
case 2:
for (int i=0;i<20;i++){
list.add(new News(R.mipmap.ic_launcher,"體育新聞 "+i,"今天","新浪網"));
}
myListAdapter.notifyDataSetChanged();
break;
case 3:
for (int i=0;i<20;i++){
list.add(new News(R.mipmap.ic_launcher,"體育新聞 "+i,"今天","新浪網"));
}
myListAdapter.notifyDataSetChanged();
break;
case 4:
for (int i=0;i<20;i++){
list.add(new News(R.mipmap.ic_launcher,"體育新聞 "+i,"今天","新浪網"));
}
myListAdapter.notifyDataSetChanged();
break;
case 5:
for (int i=0;i<20;i++){
list.add(new News(R.mipmap.ic_launcher,"體育新聞 "+i,"今天","新浪網"));
}
myListAdapter.notifyDataSetChanged();
break;
};
}
}
}</span>
<FrameLayout 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"
tools:context="com.jeredu.administrator.classday11application.fragment.pagerFragment">
<!-- TODO: Update blank fragment layout -->
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lv">
</ListView>
</FrameLayout>
MyListAdapter適配器
<span style="font-size:12px;">package com.jeredu.administrator.classday11application.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.jeredu.administrator.classday11application.R;
import java.util.List;
/**
* Created by Administrator on 2016/8/9.
*/
public class MyListAdapter extends BaseAdapter {
private List<News> list;
private Context context;
public MyListAdapter(List<News> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder vh ;
if(view == null){
vh = new ViewHolder();
view = LayoutInflater.from(context).inflate(R.layout.list_layout,null);
vh.img= (ImageView) view.findViewById(R.id.ig);
vh.titile= (TextView) view.findViewById(R.id.title);
vh.pubDate= (TextView) view.findViewById(R.id.pubDate);
vh.from= (TextView) view.findViewById(R.id.from);
view.setTag(vh);
}else{
vh= (ViewHolder) view.getTag();
}
News news= list.get(i);
vh.img.setImageResource(news.getImg());
vh.titile.setText(news.getTitle());
vh.pubDate.setText(news.getPubDate());
vh.from.setText(news.getFrom());
return view;
}
public class ViewHolder{
ImageView img;
TextView titile;
TextView pubDate;
TextView from;
}
}</span>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ig"
android:src="@mipmap/ic_launcher"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/title"
android:text="我是標題"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/pubDate"
android:text="今天"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/from"
android:text="新浪網"/>
</LinearLayout>
MyFragmentAdapter適配器
<span style="font-size:12px;">import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.List;
/**
* Created by Administrator on 2016/8/9.
*/
public class MyFragmentAdapter extends FragmentPagerAdapter{
private List<Fragment>list;
private List<String> titles;
public MyFragmentAdapter(FragmentManager fm ,List<Fragment>list, List<String> titles) {
super(fm);
this.list=list;
this.titles=titles;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
}</span>
News新聞類
<span style="font-size:12px;">public class News implements Serializable {
private int img;
private String title;
private String pubDate;
private String from;
public News(){}
public News(int img, String title, String pubDate, String from) {
this.img = img;
this.title = title;
this.pubDate = pubDate;
this.from = from;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPubDate() {
return pubDate;
}
public void setPubDate(String pubDate) {
this.pubDate = pubDate;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
}</span>
實現方法是:首先創建新聞類 然後創建ListView,將一條條新聞放進去,之後將ListView放入到ViewPager裏面,然後將在每一個Fragment都放入一個ViewPager這樣進行調用,並用PagerSlidingTabString實現連動與翻頁,常見的例子很多,這個方法也很實用。