国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android App在ViewPager中使用Fragment的實例講解

2020-01-02 06:58:45
字體:
來源:轉載
供稿:網友

據說Android最推薦的是在ViewPager中使用FragMent,即ViewPager中的頁面不像前面那樣用LayoutInflater直接從布局文件加載,而是一個個Fragment。注意這里的Fragment

是android.support.v4.view包里的Fragment,而不是android.app包里的Fragment。

使用v4包里的Fragment的Activity必須繼承自FragmentActivity。

其實使用Fragment與前面不使用Fragment非常類似:

第一步 在主布局文件里放一個ViewPager組件

第二步 為每個頁面建立布局文件,把界面寫好

第三步 為每個頁面新建Fragment類,并加載布局文件中的界面

第四部 為ViewPager設定Adapter,只不過這里的Adapter不是PagerAdapter,而是換成

FragmentPagerAdapter,實現兩個方法:

getCount():返回頁面數目

getItem(position):返回position位置的Fragment。

下面來看一個ViewPager與Fragment實現頁面滑動效果的例子:

首先繼承FragmentActivity,
為ViewPager提供展示所需的Fragment和FragmentPagerAdapter:
Fragment來指定頁面的布局以及功能

// fragment private class MyFragment extends Fragment {    private String text;   private int color;    public MyFragment(String text, int color) {     this.text = text;     this.color = color;   }    @Override   public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {     TextView tv = new TextView(MainActivity.this);     tv.setBackgroundColor(color);     tv.setText(text);     return tv;   } } 

adapter指定該Viewpager有多少頁面以及那個位置需要顯示哪個頁面:

// adapter   private class MyAdapter extends FragmentPagerAdapter {     public MyAdapter(FragmentManager fm) {       super(fm);     }      @Override     public int getCount() {       return pages.size();     }      @Override     public Fragment getItem(int arg0) {       return pages.get(arg0);     }   } 

設置OnPageChangeListener,指定頁面改變時需要做什么其他操作:

@Override public void onPageScrollStateChanged(int arg0) {  }  @Override public void onPageScrolled(int arg0, float arg1, int arg2) {   LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) tabline.getLayoutParams();   lp.leftMargin = (int) ((arg0 + arg1) * mTabLineWidth);   tabline.setLayoutParams(lp); }  @Override public void onPageSelected(int arg0) {   // set titles   for (int i = 0; i < titles.size(); i++) {     if (arg0 == i) {       titles.get(i).setSelected(true);     } else {       titles.get(i).setSelected(false);     }   } } 

完整的代碼:

package com.hzy.myviewpager;  import java.util.ArrayList;  import android.graphics.Color; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.DisplayMetrics; import android.view.Display; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.TextView;  import com.hzy.myviewpager.R.id;  public class MainActivity extends FragmentActivity implements OnPageChangeListener, OnClickListener {    ViewPager pager = null;   View tabline = null;   private int mTabLineWidth;    // titles   TextView title1 = null;   TextView title2 = null;   TextView title3 = null;    ArrayList<TextView> titles = null;   ArrayList<Fragment> pages = null;    @Override   protected void onCreate(Bundle arg0) {     super.onCreate(arg0);     initView();     initTabline();   }    private void initView() {     setContentView(R.layout.activity_main);     pages = new ArrayList<Fragment>();     titles = new ArrayList<TextView>();      pager = (ViewPager) findViewById(id.main_viewpager);     title1 = (TextView) findViewById(id.main_tab1);     title2 = (TextView) findViewById(id.main_tab2);     title3 = (TextView) findViewById(id.main_tab3);      title1.setOnClickListener(this);     title2.setOnClickListener(this);     title3.setOnClickListener(this);      titles.add(title1);     titles.add(title2);     titles.add(title3);      // create new fragments     pages.add(new MyFragment("tab1", Color.BLUE));     pages.add(new MyFragment("tab2", Color.RED));     pages.add(new MyFragment("tab3", Color.CYAN));      // set adapter     pager.setAdapter(new MyAdapter(getSupportFragmentManager()));     pager.setOnPageChangeListener(this);     pager.setCurrentItem(0);     titles.get(0).setSelected(true);   }    // tablines   private void initTabline() {     tabline = findViewById(id.main_tab_line);     Display display = getWindow().getWindowManager().getDefaultDisplay();     DisplayMetrics outMetrics = new DisplayMetrics();     display.getMetrics(outMetrics);     mTabLineWidth = outMetrics.widthPixels / 3;     LayoutParams lp = tabline.getLayoutParams();     lp.width = mTabLineWidth;     tabline.setLayoutParams(lp);   }    @Override   public void onClick(View v) {     switch (v.getId()) {     case id.main_tab1:       pager.setCurrentItem(0, true);       break;     case id.main_tab2:       pager.setCurrentItem(1, true);       break;     case id.main_tab3:       pager.setCurrentItem(2, true);       break;     default:       break;     }   }    @Override   public void onPageScrollStateChanged(int arg0) {    }    @Override   public void onPageScrolled(int arg0, float arg1, int arg2) {     LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) tabline.getLayoutParams();     lp.leftMargin = (int) ((arg0 + arg1) * mTabLineWidth);     tabline.setLayoutParams(lp);   }    @Override   public void onPageSelected(int arg0) {     // set titles     for (int i = 0; i < titles.size(); i++) {       if (arg0 == i) {         titles.get(i).setSelected(true);       } else {         titles.get(i).setSelected(false);       }     }   }    // fragment   private class MyFragment extends Fragment {      private String text;     private int color;      public MyFragment(String text, int color) {       this.text = text;       this.color = color;     }      @Override     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {       TextView tv = new TextView(MainActivity.this);       tv.setBackgroundColor(color);       tv.setText(text);       return tv;     }   }    // adapter   private class MyAdapter extends FragmentPagerAdapter {     public MyAdapter(FragmentManager fm) {       super(fm);     }      @Override     public int getCount() {       return pages.size();     }      @Override     public Fragment getItem(int arg0) {       return pages.get(arg0);     }   } } 

代碼中通過實現OnPageChangeListener接口手動設置了頁面指示條的位置。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 旺苍县| 郴州市| 永泰县| 南丰县| 灵丘县| 张掖市| 宣汉县| 凭祥市| 汝州市| 拜城县| 简阳市| 游戏| 盐城市| 类乌齐县| 金坛市| 双流县| 通江县| 临颍县| 赞皇县| 江城| 新营市| 共和县| 和平区| 毕节市| 临江市| 横山县| 兰考县| 赞皇县| 西城区| 南靖县| 开封市| 洪江市| 江津市| 合江县| 奉化市| 伊通| 如东县| 泌阳县| 宝丰县| 遂溪县| 崇明县|