Fragment的簡單實用與Fragment的生命週期

首先看一下 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實現連動與翻頁,常見的例子很多,這個方法也很實用。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章