欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

ViewPager和Fragment使用(附源碼)-創(chuàng)新互聯(lián)

目錄

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了石首免費(fèi)建站歡迎大家使用!

1 初級版

1.1?XML布局文件添加ViewPager

1.2 Java代碼創(chuàng)建Adapter類

1.2.1 重寫方法getItem

1.2.2 重寫方法getCount

1.2.3 適配器構(gòu)造器

1.3 創(chuàng)建Fragment

1.4 Java主代碼

1.4.1 數(shù)據(jù)源添加數(shù)據(jù)

1.4.2實(shí)例化適配器

1.4.3給ViewPager添加適配器

1.4.4 給ViewPager添加監(jiān)聽事件

2 中級版?

2.1 XML布局文件添加ViewPager

2.2 Java代碼創(chuàng)建Adapter類

2.3?重寫FragmentPagerAdapter的兩個方法

2.4 創(chuàng)建Fragment

2.5 Java主代碼

2.5.1 數(shù)據(jù)源添加數(shù)據(jù)

2.5.2 實(shí)例化適配器

2.5.3 給ViewPager添加適配器

2.6?ViewPager和底部導(dǎo)航欄的聯(lián)動

3 高級版

3.1 ViewPager用法

3.2?FragmentPagerAdapter用法

3.3?ButtonNavigationView用法

3.4?ViewPager切換頁面和ButtonNavigationView的聯(lián)動

3.4.1?ViewPager聯(lián)動ButtonNavigationView

3.4.2?ButtonNavigationView聯(lián)動ViewPager

3.4.3?Badge用法(新消息提示)

3.5

3.6 創(chuàng)建菜單menu

3.7?XML布局文件添加ViewPager和ButtonNavigationView

3.8 Java主代碼獲取控件

3.9?Java代碼創(chuàng)建Adapter類

3.10 重寫FragmentPagerAdapter的兩個方法

3.11 適配器構(gòu)造器

3.12 創(chuàng)建Fragment

3.12.1 XML文件

3.12.2 Java文件

3.13 Java主代碼

3.13.1 數(shù)據(jù)源添加數(shù)據(jù)

3.13.2 實(shí)例化適配器

3.13.3 給ViewPager添加適配器

3.13.4 給ViewPager添加監(jiān)聽事件

3.13.5?給ButtonNavigationView添加監(jiān)聽事件

3.14 Badge的設(shè)置

3.14.1 Badge的添加

3.14.2 Badge的移除

最后,上Activity的主代碼~


1 初級版

ViewPager通過滑動來切換Fragment,無底部導(dǎo)航欄。

用法:數(shù)據(jù)List+適配器FragmentPagerAdapter+ViewPager

通過FragmentPagerAdapter連接兩者的橋梁,里面需要重寫兩個方法getItem,getCount。

第一個方法是獲取一個Fragment,從數(shù)據(jù)源獲取。

第二個方法是獲取數(shù)據(jù)源的大小,也就是有幾頁。

1.1?XML布局文件添加ViewPager

在Activity的XML布局文件中添加一個控件——ViewPager。

加入寬高和ID即可。

在Java代碼中找控件ViewPager。


1.2 Java代碼創(chuàng)建Adapter類

繼承自FragmentPagerAdapter類,重寫兩個方法getItem,getCount。

public class MyFragmentVPAdapter extends FragmentPagerAdapter {
    private ListfragmentList;

    public MyFragmentVPAdapter(@NonNull FragmentManager fm,Listlist) {
        super(fm);
        this.fragmentList=list;
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        return fragmentList==null?null:fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList==null?0:fragmentList.size();
    }
}
1.2.1 重寫方法getItem

獲取數(shù)據(jù)源的位置

public Fragment getItem(int position){
    return mFragmentList==null?null:mFragmentList.get(position);
}
1.2.2 重寫方法getCount

獲取數(shù)據(jù)源的個數(shù)

public int getCount(){
    return mFragmentList==null?0:mFragmentList.size();
}
1.2.3 適配器構(gòu)造器

需要傳入一個FragmentManager對象和數(shù)據(jù)源。


1.3 創(chuàng)建Fragment

也是只有一個文本TextView,new的時候傳入一個參數(shù)來更改文本。


1.4 Java主代碼

聲明數(shù)據(jù)源List,實(shí)例化適配器。

1.4.1 數(shù)據(jù)源添加數(shù)據(jù)

實(shí)例化Fragment,用newInstance()。并add到List中。

1.4.2實(shí)例化適配器

傳入兩個參數(shù),getSupportFragmentManager()即可獲取FragmentManager對象,數(shù)據(jù)源。

1.4.3給ViewPager添加適配器

setAdapter即可。

1.4.4 給ViewPager添加監(jiān)聽事件

addOnPageChangeListener(),其中可以設(shè)置比如讓底部導(dǎo)航欄變色。


2 中級版?

ViewPager通過滑動來切換Fragment,有普通的底部導(dǎo)航欄,故也可以通過底部導(dǎo)航欄切換fragment。

用法:ViewPager+FragmentPagerAdapter+普通ButtonView

ViewPager用法+FragmentPagerAdapter的用法+ViewPager和底部導(dǎo)航欄的聯(lián)動

就是要寫很多控件,還要找,比較麻煩。

2.1 XML布局文件添加ViewPager

在Activity的XML布局文件中添加一個控件——ViewPager。

加入寬高和ID即可。

在Java代碼中找控件ViewPager。


2.2 Java代碼創(chuàng)建Adapter類

繼承自FragmentPagerAdapter類,重寫兩個方法getItem,getCount。


2.3?重寫FragmentPagerAdapter的兩個方法

同上1.2。


2.4 創(chuàng)建Fragment

也是只有一個文本TextView,new的時候傳入一個參數(shù)來更改文本。


2.5 Java主代碼

聲明數(shù)據(jù)源List,實(shí)例化適配器。

2.5.1 數(shù)據(jù)源添加數(shù)據(jù)

實(shí)例化Fragment,用newInstance()。并add到List中。

2.5.2 實(shí)例化適配器

傳入兩個參數(shù),getSupportFragmentManager()即可獲取FragmentManager對象,數(shù)據(jù)源。

2.5.3 給ViewPager添加適配器

setAdapter即可。


2.6?ViewPager和底部導(dǎo)航欄的聯(lián)動

當(dāng)切換頁面的時候,把底部導(dǎo)航相應(yīng)的狀態(tài)給改變一下。通過ViewPager的addOnPageChangeListener的三個回調(diào)。

當(dāng)點(diǎn)擊底部導(dǎo)航時,把Fragment的頁面給切換一下。通過線性布局的按鈕點(diǎn)擊事件的回調(diào)。


3 高級版

ViewPager通過滑動來切換Fragment,底部導(dǎo)航欄換成了ButtonNavigationView,故也可以通過底部導(dǎo)航欄切換fragment。

就是在中級版的基礎(chǔ)上,把普通按鈕換成了另外一個控件ButtonNavigationView,這個控件更加方便。

用法:ViewPager+FragmentPagerAdapter+ButtonNavigationView實(shí)現(xiàn)底部導(dǎo)航頁

ViewPager用法+FragmentPagerAdapter用法+ButtonNavigationView用法+ViewPager切換頁面和ButtonNavigationView的聯(lián)動+Badge用法(新消息提示)。

3.1 ViewPager用法

數(shù)據(jù)List<>+適配器FragmentPagerAdapter+ViewPager


3.2?FragmentPagerAdapter用法

繼承自FragmentPagerAdapter類,重寫兩個方法getItem,getCount。

同上1.2。


3.3?ButtonNavigationView用法

有兩個重要的屬性app:menu(聲明導(dǎo)航按鈕)和app:labelVisibility(導(dǎo)航按鈕的顯示模式,有4個值可選)

labeled(一直顯示文字),unlabeled(不顯示文字),selected(選中顯示文字),auto(自動:小于三個按鈕取labeled;大于三個按鈕取selected)。


3.4?ViewPager切換頁面和ButtonNavigationView的聯(lián)動 3.4.1?ViewPager聯(lián)動ButtonNavigationView

當(dāng)ViewPager發(fā)生變化時,底部按鈕要發(fā)生變化

mViewPager.addOnPageChangeListener(...)

mBottomNavigationView.setSelectedItemId(R.id.menu_xxx)
3.4.2?ButtonNavigationView聯(lián)動ViewPager

當(dāng)點(diǎn)擊按鈕時,ViewPager要發(fā)生變化

mBottomNavigationView.setOnItemSelectedListener(...)

mViewPager.setCurrentItem(index)
3.4.3?Badge用法(新消息提示)

創(chuàng)建Badge

//新消息加到菜單中哪個icon中,注冊
BadgeDrawable badge=mBottomNavigationView.getOrCreateBadge(R.id.menu_xxx);

設(shè)置消息數(shù)

//默認(rèn)是4個字符,只能999+
badge.setNumber(949);
//代表只能容下3個字符,99+
//若是4,則是999+
badge.setMaxCharacterCount(3);

到達(dá)頁面移除badge

mBottomNavigationView.removeBadge(R.id.menu_xxx);

開始寫代碼咯!?

3.5 3.6 創(chuàng)建菜單menu

之前的博客有寫,直接創(chuàng)建選項菜單即可。可以在icon選取一個selected選擇器,有按下和不按的兩種圖標(biāo)狀態(tài)。我這里沒有設(shè)置選擇器,只有一個icon而已。

3.7?XML布局文件添加ViewPager和ButtonNavigationView

最基礎(chǔ)的是設(shè)置寬高和Id,如果沒有ButtonNavigationView控件,可能是沒有導(dǎo)入依賴"com.google.android.material:material:1.2.1"。

ViewPager額外設(shè)置權(quán)重weight屬性。

ButtonNavigationView額外設(shè)置app:menu和app:labelVisibility。

3.8 Java主代碼獲取控件

找兩個控件即可。

public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private BottomNavigationView mBottomNavigationView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mBottomNavigationView = findViewById(R.id.btm_nav);
        viewPager = findViewById(R.id.vp);
    }
}
3.9?Java代碼創(chuàng)建Adapter類

繼承自FragmentStatePagerAdapter類,這個類會回收劃掉的頁面,而前面那個FragmentPagerAdapter不會回收,會在后臺占據(jù)著內(nèi)存,使用方面是一樣的。

3.10 重寫FragmentPagerAdapter的兩個方法

重寫getItem,getCount。同上1.2。

3.11 適配器構(gòu)造器

設(shè)置一個傳入FragmentManager對象和數(shù)據(jù)源的構(gòu)造器。


3.12 創(chuàng)建Fragment 3.12.1 XML文件

也是只有一個文本TextView,new的時候傳入一個參數(shù)來更改文本。

3.12.2 Java文件

通過傳入?yún)?shù)來更改文本

public class viewPagerFragment extends Fragment {

    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    private String mParam1;
    private String mParam2;
    private TextView textView;

    public viewPagerFragment() {
    }

    public static viewPagerFragment newInstance(String param1, String param2) {
        viewPagerFragment fragment = new viewPagerFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_view_pager, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view,
                              @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        textView= view.findViewById(R.id.tv_1);
        if(TextUtils.isEmpty(mParam1)){
            textView.setText(mParam1);
        }
    }
}

3.13 Java主代碼

聲明數(shù)據(jù)源List,實(shí)例化適配器。

Listlist=new ArrayList<>();
3.13.1 數(shù)據(jù)源添加數(shù)據(jù)

實(shí)例化Fragment,用newInstance()。并add到List中。

private void initData() {
        viewPagerFragment viewPagerFragmenthome=viewPagerFragment.newInstance("首頁","");
        viewPagerFragment viewPagerFragmentfind=viewPagerFragment.newInstance("發(fā)現(xiàn)","");
        viewPagerFragment viewPagerFragmentmine=viewPagerFragment.newInstance("我的","");
        
        list.add(viewPagerFragmenthome);
        list.add(viewPagerFragmentfind);
        list.add(viewPagerFragmentmine);
    }
3.13.2 實(shí)例化適配器

傳入兩個參數(shù),getSupportFragmentManager()即可獲取FragmentManager對象,數(shù)據(jù)源。

myFragmentVPAdapter = new MyFragmentVPAdapter(getSupportFragmentManager(), list);
3.13.3 給ViewPager添加適配器

setAdapter即可。

viewPager.setAdapter(myFragmentVPAdapter);
3.13.4 給ViewPager添加監(jiān)聽事件

addOnPageChangeListener(),其中可以設(shè)置比如讓底部導(dǎo)航欄變色。

mViewPager.addOnPageChangeListener(...)
 
mBottomNavigationView.setSelectedItemId(R.id.menu_xxx)
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                switch(position){
                    case 0:
                        mBottomNavigationView.setSelectedItemId(R.id.like);
                        break;
                    case 1:
                        mBottomNavigationView.setSelectedItemId(R.id.local);
                        break;
                    case 2:
                        mBottomNavigationView.setSelectedItemId(R.id.report);
                        break;
                    case 3:
                        mBottomNavigationView.setSelectedItemId(R.id.share);
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

寫在第二個回調(diào)onPageSelected(),然后設(shè)置某個icon被選中即可,不需要再取消其他icon的選中狀態(tài),這個控件選中其中一個,另外的icon就會被取消,這就是ButtonNavigationView的好處。

3.13.5?給ButtonNavigationView添加監(jiān)聽事件

mBottomNavigationView.setOnItemSelectedListener(),可以讓ViewPager切換頁面。

//舊方法,已經(jīng)廢棄
mBottomNavigationView.setOnItemSelectedListener(...)
//設(shè)置ViewPager
mViewPager.setCurrentItem(index)
//我們這里不用廢棄的舊方法,用setOnItemSelectedListener
mBottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch(item.getItemId()){
                    case R.id.like:
                        viewPager.setCurrentItem(0);
                        break;
                    case R.id.local:
                        viewPager.setCurrentItem(1);
                        break;
                    case R.id.report:
                        viewPager.setCurrentItem(2);
                        break;
                    case R.id.share:
                        viewPager.setCurrentItem(3);
                        break;
                    default:
                        break;
                }
                return true;
            }
        });
3.14 Badge的設(shè)置 3.14.1 Badge的添加
BadgeDrawable badgeDrawable=mBottomNavigationView.getOrCreateBadge(R.id.like);
        badgeDrawable.setNumber(888);
        badgeDrawable.setMaxCharacterCount(3);
3.14.2 Badge的移除

在ViewPager的頁面監(jiān)聽事件中獲取信息,如果到達(dá)這個頁面的話就移除。

mBottomNavigationView.removeBadge(R.id.like);
最后,上Activity的主代碼~
package com.example.fragmentviewpager;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;

import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationBarView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private BottomNavigationView mBottomNavigationView;
    private MyFragmentVPAdapter myFragmentVPAdapter;
    Listlist=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mBottomNavigationView = findViewById(R.id.btm_nav);
        viewPager = findViewById(R.id.vp);

        initData();

        myFragmentVPAdapter = new MyFragmentVPAdapter(getSupportFragmentManager(), list);

        viewPager.setAdapter(myFragmentVPAdapter);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                switch(position){
                    case 0:
                        mBottomNavigationView.removeBadge(R.id.like);
                        mBottomNavigationView.setSelectedItemId(R.id.like);
                        break;
                    case 1:
                        mBottomNavigationView.setSelectedItemId(R.id.local);
                        break;
                    case 2:
                        mBottomNavigationView.setSelectedItemId(R.id.report);
                        break;
                    case 3:
                        mBottomNavigationView.setSelectedItemId(R.id.share);
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        mBottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch(item.getItemId()){
                    case R.id.like:
                        viewPager.setCurrentItem(0);
                        break;
                    case R.id.local:
                        viewPager.setCurrentItem(1);
                        break;
                    case R.id.report:
                        viewPager.setCurrentItem(2);
                        break;
                    case R.id.share:
                        viewPager.setCurrentItem(3);
                        break;
                    default:
                        break;
                }
                return true;
            }
        });

        BadgeDrawable badgeDrawable=mBottomNavigationView.getOrCreateBadge(R.id.like);
        badgeDrawable.setNumber(888);
        badgeDrawable.setMaxCharacterCount(3);
    }

    private void initData() {
        viewPagerFragment viewPagerFragmenthome=viewPagerFragment.newInstance("首頁","");
        viewPagerFragment viewPagerFragmentfind=viewPagerFragment.newInstance("發(fā)現(xiàn)","");
        viewPagerFragment viewPagerFragmentmine=viewPagerFragment.newInstance("我的","");

        list.add(viewPagerFragmenthome);
        list.add(viewPagerFragmentfind);
        list.add(viewPagerFragmentmine);
    }
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁題目:ViewPager和Fragment使用(附源碼)-創(chuàng)新互聯(lián)
瀏覽地址:http://chinadenli.net/article6/dehcig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、標(biāo)簽優(yōu)化、網(wǎng)站內(nèi)鏈、靜態(tài)網(wǎng)站ChatGPT、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
99久只有精品免费视频播放| 色哟哟在线免费一区二区三区| 精品欧美日韩一二三区| 久热99中文字幕视频在线| 又黄又硬又爽又色的视频| 免费在线成人激情视频| 九九热视频免费在线视频| 91麻豆视频国产一区二区| 日本成人中文字幕一区| 99香蕉精品视频国产版| 偷拍美女洗澡免费视频| 亚洲免费黄色高清在线观看| 熟女中文字幕一区二区三区| 高清不卡视频在线观看| 丁香七月啪啪激情综合| 九九热最新视频免费观看| 日韩精品免费一区三区| 富婆又大又白又丰满又紧又硬| 国产精品午夜福利免费在线| 精品日韩中文字幕视频在线| 麻豆蜜桃星空传媒在线观看| 激情中文字幕在线观看| 免费午夜福利不卡片在线 视频| 国产内射在线激情一区| 欧美日韩国产一级91| 国产成人精品一区在线观看| 一区二区三区四区亚洲另类| 少妇特黄av一区二区三区| 好吊日在线观看免费视频| 久久99热成人网不卡| 老司机亚洲精品一区二区| 久久亚洲精品中文字幕| 操白丝女孩在线观看免费高清| 国产午夜精品美女露脸视频| 国产精品欧美激情在线观看| 九九热精彩视频在线免费| 国产亚洲午夜高清国产拍精品| 欧美激情一区=区三区| 国产日韩欧美国产欧美日韩| 精品精品国产欧美在线| 欧美人妻少妇精品久久性色|