Android多页面加载

前天面试有人问我多页面加载,我一懵逼。后来才想起来是这么一回事,上代码

  1. 从页面来看第一层很普通就是一个Activity加上三个Fragment,代码很简单
public class MainActivity extends FragmentActivity {

    private final int CALLLOGS = 0;
    private final int CONTACTS = 1;
    private final int DIAL = 2;
    private int mLastIndex = CONTACTS;
    private CallLogsFragment mCallLogsFragment;
    private ContactsFragment mContactsFragment;
    private DailFragment mDailFragment;
    private List<Fragment> mFragments = new ArrayList<>(3);
    private List<TextView> mViews = new ArrayList<>(3);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initViews();
        initFragments();
        showFragment(CALLLOGS);
    }

    /**
     * 初始化View
     */
    private void initViews() {
        mViews.add((TextView) findViewById(R.id.calllogs));
        mViews.add((TextView) findViewById(R.id.contacts));
        mViews.add((TextView) findViewById(R.id.dial));
    }

    /**
     * 初始化Fragments
     */
    private void initFragments() {
        mCallLogsFragment = new CallLogsFragment();
        mContactsFragment = new ContactsFragment();
        mDailFragment = new DailFragment();
        mFragments.add(mCallLogsFragment);
        mFragments.add(mContactsFragment);
        mFragments.add(mDailFragment);
    }

    /**
     * 显示当前Fragment
     *
     * @param index 当前的位置
     */
    private void showFragment(int index) {
        TextView lastTextView = mViews.get(mLastIndex);
        if (lastTextView != null && lastTextView.isSelected()) {
            lastTextView.setSelected(false);
        }
        TextView currentTextView = mViews.get(index);
        if (currentTextView != null && !currentTextView.isSelected()) {
            currentTextView.setSelected(true);
        }

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        Fragment currentFragment = mFragments.get(index);
        if (currentFragment != null) {
            if (!currentFragment.isAdded()) {
                transaction.add(R.id.container, currentFragment);
            } else {
                currentFragment.onResume();
            }
        } else {
            return;
        }
        transaction.show(currentFragment);
        Fragment lastFragment = mFragments.get(mLastIndex);
        if (lastFragment != null) {
            if (lastFragment.isAdded() && lastFragment.isVisible()) {
                lastFragment.onPause();
                transaction.hide(lastFragment);
            }
        }
        transaction.commitAllowingStateLoss();
        mLastIndex = index;
    }

    /**
     * 处理底部点击事件
     *
     * @param v
     */
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.calllogs: {
                showFragment(CALLLOGS);
                break;
            }
            case R.id.contacts: {
                showFragment(CONTACTS);
                break;
            }
            case R.id.dial: {
                showFragment(DIAL);
                break;
            }
            default:
                break;
        }
    }

}


2. 好玩的是第一个Fragment里面又嵌入了一个两个fragment,用于滑动,代码大概就是

public class CallLogsFragment extends Fragment {
private static final String TAG = “CallLogsFragment”;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_calllogs, null);
    ViewPager viewPager = (ViewPager) view.findViewById(R.id.child_container);
    viewPager.setAdapter(new PagerAdater(((MainActivity) getActivity()).getSupportFragmentManager()));
    return view;
}

@Override
public void onResume() {
    Log.d(TAG, "onResume");
    super.onResume();
}

@Override
public void onPause() {
    Log.d(TAG, "onPause");
    super.onPause();
}

@Override
public void onStop() {
    Log.d(TAG, "onStop");
    super.onStop();
}

@Override
public void onStart() {
    Log.d(TAG, "onStart");
    super.onStart();
}

@Override
public void onDetach() {
    Log.d(TAG, "onDetach");
    super.onDetach();
}

@Override
public void onDestroy() {
    Log.d(TAG, "onDestroy");
    super.onDestroy();
}

@Override
public void onDestroyView() {
    Log.d(TAG, "onDestroyView");
    super.onDestroyView();
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    Log.d(TAG, "onActivityCreated");
    super.onActivityCreated(savedInstanceState);
}

public class PagerAdater extends FragmentPagerAdapter {

    private List<Fragment> mFragments = new ArrayList<>(2);

    public PagerAdater(FragmentManager fm) {
        super(fm);
        mFragments.add(new AllFragment());
        mFragments.add(new SingleFragment());
    }

    @Override
    public android.support.v4.app.Fragment getItem(int i) {
        return mFragments.get(i);
    }

    @Override
    public int getCount() {
        return mFragments.size();
    }
}

}

这里写图片描述
具体demo传送门

猜你喜欢

转载自blog.csdn.net/JustingWang_1/article/details/80236507