话不多说先上效果演示
演示
还包括了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() {
}
}
复制上去肯定会报错,因为缺少了navigation_main.xml和layout_navigation_header.xml
在res下创建menu文件夹,然后在menu文件下创建navigation_main.xml
layout_navigation_header布局文件如下: