前天面试有人问我多页面加载,我一懵逼。后来才想起来是这么一回事,上代码
- 从页面来看第一层很普通就是一个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();
}
}
}