Android,实现Fragment切换

话不多说先上效果演示

演示

还包括了NavigationView(导航抽屉)的效果,不会的可以先看
NavigationView(导航抽屉)

在Mainactivity中进行设置

/*设置mainactivity的布局文件*/
@Override
    public int getLayoutId() {
        return R.layout.activity_main;
    }
/*初始化各种Fragment类*/
    private void initFragment() {
        homeFragment = new HomeFragment();
        managerFragment = ManagerFragment.newInstance();
        favorityFragment = FavorityFragment.newInstance();
        settingFragment = SettingFragment.newInstance();
        borrowFragment = BorrowFragment.newInstance();
        fragments = new Fragment[]{
                homeFragment,
                managerFragment,
                favorityFragment,
                settingFragment,
                borrowFragment
        };
        getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.container, homeFragment)
                .show(homeFragment).commit();
    }
    
    /*初始化NavigationView*/
    private void initNavigationView() {
        mNavigationView.setNavigationItemSelectedListener(this);
        View headerView = mNavigationView.getHeaderView(0);
        CircleImageView mUserAvatarView = (CircleImageView) headerView.findViewById(R.id.user_avatar_view);
        TextView mUserName = (TextView) headerView.findViewById(R.id.user_name);
        TextView mUserLevel = (TextView) headerView.findViewById(R.id.user_level);
        String name = getSharedPreferences("user", MODE_PRIVATE).getString("username", "听雨喧");
        userLevel = DbUtil.getUserLevel(this, name);
        mUserLevel.setText("LV"+ userLevel);
        //设置名字
        mUserName.setText(name);

    }

    /*点击NavigationView*/
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.item_exit:
                //切换帐号
                getSharedPreferences("user", MODE_PRIVATE).edit().putString("username","").commit();
                startActivity(new Intent(this,LoginActivity.class));
                finish();
                break;
            //主页
            case R.id.item_home:
                toggleDrawer();
                changeFragmentIndex(item, 0);
                boolean update = getSharedPreferences("book", MODE_PRIVATE).getBoolean("update", false);
                //System.out.println("-0-----------------dianjile--item_home:"+update);
                if(update){
                    homeFragment.reFreshData();
                }
                break;
            //管理界面
            case R.id.item_manager:
                toggleDrawer();
                if(userLevel<2){
                    ToastUtil.showLong(this,"抱歉,只有管理员才能进入");
                }else {
                    changeFragmentIndex(item, 1);
                }
                break;
            //收藏图书界面
            case R.id.item_favourite:
                toggleDrawer();
                changeFragmentIndex(item, 2);
                break;

            //设置界面
            case R.id.item_settings:
                toggleDrawer();
                changeFragmentIndex(item,3);
                break;

            case R.id.item_history:
                toggleDrawer();
                changeFragmentIndex(item, 4);
                break;

        }
        return false;
    }

    private void showManagerFragment() {

    }

    /**
     * DrawerLayout侧滑菜单开关
     */
    public void toggleDrawer() {
        if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
            mDrawerLayout.closeDrawer(GravityCompat.START);
        } else {
            mDrawerLayout.openDrawer(GravityCompat.START);
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (mDrawerLayout.isDrawerOpen(mDrawerLayout.getChildAt(1))) {
                mDrawerLayout.closeDrawers();
            } else {
                exitApp();
            }
        }
        return true;
    }
    /**
     * 双击退出App
     */
    private long exitTime;
    private void exitApp() {
        if (System.currentTimeMillis() - exitTime > 2000) {
            ToastUtil.showShort(this,"再按一次退出");
            exitTime = System.currentTimeMillis();
        } else {
//            PreferenceUtil.remove(ConstantUtil.SWITCH_MODE_KEY);
            finish();
        }
    }

    @Override
    public void onBackPressed() {
        exitApp();
        super.onBackPressed();

    }

    private int currentTabIndex;
    private int index;

    /**
     * Fragment切换
     */
    private void switchFragment() {
        FragmentTransaction trx = getSupportFragmentManager().beginTransaction();
        trx.hide(fragments[currentTabIndex]);
        if (!fragments[index].isAdded()) {
            trx.add(R.id.container, fragments[index]);
        }
        trx.show(fragments[index]).commit();
        currentTabIndex = index;
    }

    /**
     * 切换Fragment的下标
     */
    private void changeFragmentIndex(MenuItem item, int currentIndex) {
        index = currentIndex;
        switchFragment();
        item.setChecked(true);
    }

自定义的BaseFragment(创建的Fragment类都继承自BaseFragment),没什么具体的干货,可以不用仔细看

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import butterknife.ButterKnife;
import butterknife.Unbinder;
import tingyuxuan.hosition.zxyoyo.com.tingyuxuan.utils.LogUtil;

/**
 * ---------------------------------------------
 * Created by small-star-star on 2017/10/18.
 * tel:[email protected]
 * 纸上得来终觉浅
 * fragment基础类
 * ---------------------------------------------
 */

public abstract class BaseFragment extends Fragment {
    protected View parentView;
    //初始化完成
    protected boolean isPrepared;
    //fragment可见
    protected boolean isVisiable;
    private Unbinder bind;

    public abstract
    @LayoutRes
     int getLayoutResId();

    private FragmentActivity activity;
    private Context context;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        activity = getSupportActivity();
        parentView = inflater.inflate(getLayoutResId(),container,false);
        LogUtil.e("fragmentlife","onCreateView");
        return parentView;
    }


    public FragmentActivity getSupportActivity(){
        return super.getActivity();
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        bind = ButterKnife.bind(this,view);
        finishCreateView(savedInstanceState);
        LogUtil.e("fragmentlife","onViewCreated");
    }

    /**
     * 初始化view
     * @param state
     */
    public abstract void finishCreateView(Bundle state);


    @Override
    public void onResume() {
        super.onResume();
        LogUtil.e("fragmentlife","onResume");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        bind.unbind();
        LogUtil.e("fragmentlife","onDestroy");
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context;
        LogUtil.e("fragmentlife","onAttach");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        this.context = null;
        LogUtil.e("fragmentlife","onDetach");
    }

    /**
     * 数据懒加载
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        LogUtil.e("fragmentlife","setUserVisibleHint-"+isVisibleToUser);
        if(getUserVisibleHint()){
            isVisiable = true;
            onVisiable();
        }else {
            isVisiable  = false;
            onInvisiable();
        }
    }

    /**
     * fragment不可见
     */
    protected  void onInvisiable(){

    }

    /**
     * fragment 可见
     */
    protected  void onVisiable(){
        loadData();
    }

    /**
     * 加载数据
     */
    protected  void loadData(){

    }

    /**
     * 初始化recyclerView
     */
    protected void initRecyclerView() {
    }

    /**
     * 初始化refreshLayout
     */
    protected void initRefreshLayout() {
    }

    /**
     * 设置数据显示
     */
    protected void finishTask() {
    }


}

MainActivity的布局



    

    


复制上去肯定会报错,因为缺少了navigation_main.xml和layout_navigation_header.xml
在res下创建menu文件夹,然后在menu文件下创建navigation_main.xml




    
        


    


    

        

        


    


    

        
        
        

    


layout_navigation_header布局文件如下:
Android,实现Fragment切换_第1张图片




    

        
    

    

        


        

            


        


        


            

                

                

            


            

            
        

    



你可能感兴趣的:(android语言)