jQuery鼠标指针特效

MATERIAL DESIGN 的TabLayou + Fragment 切换 ,保存状态

MainActivity.java

package com.blink.blinkdemo.activity;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

import android.os.Bundle;
import android.os.PersistableBundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.blink.blinkdemo.R;
import com.blink.blinkdemo.fragment.FragmentBTCallHistory;
import com.blink.blinkdemo.fragment.FragmentBTCallPhone;
import com.blink.blinkdemo.fragment.FragmentBTMusic;
import com.blink.blinkdemo.fragment.FragmentBTPairedHistory;
import com.blink.blinkdemo.fragment.FragmentBTPhoneBook;
import com.blink.blinkdemo.fragment.FragmentBTSetting;
import com.google.android.material.tabs.TabLayout;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    private final static String TAG = "MainActivity";
    private static final String PAIRED_FRAGMENT_KEY = "PairedFragment";
    private static final String CALL_FRAGMENT_KEY = "CallFragment";
    private static final String LOG_FRAGMENT_KEY = "LogFragment";
    private static final String MUSIC_FRAGMENT_KEY = "MusicFragment";
    private static final String PHONE_BOOK_FRAGMENT_KEY = "PhoneBookFragment";
    private static final String SET_FRAGMENT_KEY = "SetFragment";

    private TabLayout mTabLayout;
    private FrameLayout mFrameLayout;
    private String[] mString = new String[]{"蓝牙_拨号", "蓝牙_电话本", "蓝牙_通话记录", "蓝牙_音乐", "蓝牙_连接", "蓝牙_设置"};
    private ArrayList<Fragment> mFragmentArrayList = new ArrayList<>();
    private FragmentBTPairedHistory mBTPairedHistory;
    private FragmentBTCallPhone mBTCallPhone;
    private FragmentBTCallHistory mBTCallHistory;
    private FragmentBTMusic mBTMusic;
    private FragmentBTPhoneBook mBTPhoneBook;
    private FragmentBTSetting mBTSetting;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Hide both the navigation bar and the status bar.
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        if (savedInstanceState != null) {
            /*获取保存的fragment  没有的话返回null*/
            mBTCallPhone = (FragmentBTCallPhone) getSupportFragmentManager().getFragment(savedInstanceState, CALL_FRAGMENT_KEY);
            mBTPairedHistory = (FragmentBTPairedHistory) getSupportFragmentManager().getFragment(savedInstanceState, PAIRED_FRAGMENT_KEY);
            mBTCallHistory = (FragmentBTCallHistory) getSupportFragmentManager().getFragment(savedInstanceState, LOG_FRAGMENT_KEY);
            mBTMusic = (FragmentBTMusic) getSupportFragmentManager().getFragment(savedInstanceState, MUSIC_FRAGMENT_KEY);
            mBTPhoneBook = (FragmentBTPhoneBook) getSupportFragmentManager().getFragment(savedInstanceState, PHONE_BOOK_FRAGMENT_KEY);
            mBTSetting = (FragmentBTSetting) getSupportFragmentManager().getFragment(savedInstanceState, SET_FRAGMENT_KEY);

            addToList(mBTCallPhone);
            addToList(mBTPairedHistory);
            addToList(mBTMusic);
            addToList(mBTPhoneBook);
            addToList(mBTSetting);
            addToList(mBTCallHistory);
        } else {
            initFragment();
        }
        initView();
    }

    private void initView() {
        mFrameLayout = findViewById(R.id.fl_content);
        mTabLayout = findViewById(R.id.tabLayout);
        for (int i = 0; i < mString.length; i++) {
            mTabLayout.addTab(mTabLayout.newTab().setCustomView(setCustomTab(i)));
            //mTabLayout.getTabAt(i).setCustomView(setCustomTab(i));
        }

        mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                //选中某个tab
                int index = tab.getPosition();
                //Log.d(TAG,index+"");
                switch (index) {
                    case 0:
                        if (mBTCallPhone == null) {
                            mBTCallPhone = new FragmentBTCallPhone();
                        }
                        addFragment(mBTCallPhone);
                        showFragment(mBTCallPhone);
                        break;
                    case 1:
                        if (mBTPhoneBook == null) {
                            mBTPhoneBook = new FragmentBTPhoneBook();
                        }
                        addFragment(mBTPhoneBook);
                        showFragment(mBTPhoneBook);
                        break;
                    case 2:
                        if (mBTCallHistory == null) {
                            mBTCallHistory = new FragmentBTCallHistory();
                        }
                        addFragment(mBTCallHistory);
                        showFragment(mBTCallHistory);
                        break;
                    case 3:
                        if (mBTMusic == null) {
                            mBTMusic = new FragmentBTMusic();
                        }
                        addFragment(mBTMusic);
                        showFragment(mBTMusic);
                        break;
                    case 4:
                        if (mBTPairedHistory == null) {
                            mBTPairedHistory = new FragmentBTPairedHistory();
                        }
                        addFragment(mBTPairedHistory);
                        showFragment(mBTPairedHistory);
                        break;
                    case 5:
                        if (mBTSetting == null) {
                            mBTSetting = new FragmentBTSetting();
                        }
                        addFragment(mBTSetting);
                        showFragment(mBTSetting);
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                //当tab从选择到未选择
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                //已经选中tab后的重复点击tab
            }
        });

    }

    private View setCustomTab(int i) {
        View view = LayoutInflater.from(this).inflate(R.layout.tab_item, null);
        TextView textView = view.findViewById(R.id.tv_title);
        textView.setText(mString[i]);
        return view;
    }

    private void initFragment() {
        mBTPairedHistory = new FragmentBTPairedHistory();
        addFragment(mBTPairedHistory);
        showFragment(mBTPairedHistory);
    }

    /*显示fragment
     * 旋转屏幕时,activity是会被onDestory的,在onDestory之前执行了onSaveInstanceState(Bundle outState)这个方法,
     * 这个方法保存了activity的一些状态信息,其中就包括所添加过的fragment。
     * */
    private void showFragment(Fragment fragment) {
        for (Fragment frag : mFragmentArrayList) {
            if (frag != fragment) {
                getSupportFragmentManager().beginTransaction().hide(frag).commit();
            }
        }
        /*getSupportFragmentManager().beginTransaction().
                setCustomAnimations(R.anim.slide_left_in,R.anim.slide_left_out).commit();*/
        getSupportFragmentManager().beginTransaction().show(fragment).commit();
    }

    private void addFragment(Fragment fragment) {
        /*判断该fragment是否已经被添加过  如果没有被添加  则添加*/
        if (!fragment.isAdded()) {
            getSupportFragmentManager().beginTransaction().add(R.id.fl_content, fragment).commit();
            /*添加到 fragmentList*/
            mFragmentArrayList.add(fragment);
        }
    }

    private void addToList(Fragment fragment) {
        if (fragment != null) {
            mFragmentArrayList.add(fragment);
        }

        Log.d(TAG, "fragmentList数量" + mFragmentArrayList.size());
    }

    @Override
    public void onSaveInstanceState(@NonNull Bundle outState, @NonNull PersistableBundle outPersistentState) {
        Log.d(TAG,"onSaveInstanceState");
        /*fragment不为空时,保存*/
        if(mBTPairedHistory != null){
            getSupportFragmentManager().putFragment(outState,PAIRED_FRAGMENT_KEY,mBTPairedHistory);
        }
        if(mBTCallPhone != null){
            getSupportFragmentManager().putFragment(outState,CALL_FRAGMENT_KEY,mBTCallPhone);
        }
        if(mBTCallHistory != null){
            getSupportFragmentManager().putFragment(outState,LOG_FRAGMENT_KEY,mBTCallHistory);
        }
        if(mBTPhoneBook != null){
            getSupportFragmentManager().putFragment(outState,PHONE_BOOK_FRAGMENT_KEY,mBTPhoneBook);
        }
        if(mBTMusic != null){
            getSupportFragmentManager().putFragment(outState,MUSIC_FRAGMENT_KEY,mBTMusic);
        }
        if(mBTSetting != null){
            getSupportFragmentManager().putFragment(outState,SET_FRAGMENT_KEY,mBTSetting);
        }
        super.onSaveInstanceState(outState, outPersistentState);
    }
}

 

posted @ 2021-11-22 19:12  僵小七  阅读(50)  评论(0编辑  收藏  举报