先放效果图。
有些时候需要整个页面改变,但是又没必要创建一个新的Activity,这时候可以使用这个方法。大致思路是,创建的第一个界面为主界面,通过这个界面打开其它的Fragment。主界面的Fragment是在MainActivity里面创建的,其它的Fragment是在主Fragment的java文件中创建。创建一个新的Fragment的时候把当前的Fragment隐藏,加入回退栈,这样按下返回键时会回退到上一个Fragment。如果不加入回退栈,则会执行onStop。其实还可以更改标题栏内容,这个Demo没有做,下面简单说下方法。使用getActivity()获取到当前的Activity。其实就创建了一个。然后使用setTitle()方法,更改标题栏内容。
注意:这个时候如果回退到上一个Fragmetn,标题栏内容依然是更改后的内容,标题栏的操作与Fragment的回退无关。
Java文件与XML文件比较多,在这里只贴出主Fragment的代码,整个工程文件打包提供下载。
public class mainFragment extends Fragment {
String TAG = "TAG";
Handler mHandler;
View view = null;
MainActivity mainActivity;
FragmentManager fm;
FragmentTransaction transaction;
Button mFirstBt;
Button mSecondBt;
Button mThreadBt;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.main, container, false);
//mHandler = mainActivity.mHandler;
//绑定界面的按钮 实现按钮的点击事件
findview();
Log.i(TAG, "显示主Fragment");
return view;
}
private void findview() {
// 绑定主Fragment里面的三个按钮
mFirstBt = (Button) view.findViewById(R.id.firstbt);
mSecondBt = (Button) view.findViewById(R.id.secondbt);
mThreadBt = (Button) view.findViewById(R.id.threadbt);
Log.i(TAG, "按钮绑定");
mFirstBt.setOnClickListener(new btOnclick());
mSecondBt.setOnClickListener(new btOnclick());
mThreadBt.setOnClickListener(new btOnclick());
}
class btOnclick implements OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.firstbt:
// 点击第一个按钮 创建第一个Fragment
selectFM(1);
break;
case R.id.secondbt:
// 点击第二个按钮 创建第二个Fragment
selectFM(2);
break;
case R.id.threadbt:
// 点击第三个按钮 创建第三个Fragment
selectFM(3);
break;
default:
break;
}
}
}
void selectFM(int i) {
fm = getFragmentManager();
transaction = fm.beginTransaction();
switch (i) {
case 1:
FirstFragment fm_first = new FirstFragment();
transaction.hide(this);
transaction.add(R.id.id_content, fm_first);
transaction.addToBackStack(null);
Log.i("TAG", "进入port");
break;
case 2:
SecondFragment fm_second = new SecondFragment();
transaction.hide(this);
transaction.add(R.id.id_content, fm_second);
transaction.addToBackStack(null);
break;
case 3:
ThreadFragment fm_thread = new ThreadFragment();
transaction.hide(this);
transaction.add(R.id.id_content, fm_thread);
transaction.addToBackStack(null);
break;
default:
break;
}
transaction.commit();
}
}
在改变标题栏或者在标题栏加入返回功能遇到问题的请留言
Demo链接:http://pan.baidu.com/s/1hsLd6Hu 密码:ir10
本文介绍如何在一个Activity中管理多个Fragment进行切换,避免创建新Activity。主要思路是创建一个主Fragment,通过它来打开其他Fragment,并利用回退栈管理Fragment的显示与隐藏。在切换Fragment时,可以更新标题栏内容,但回退时标题栏内容不变。提供了完整的Demo供下载参考。
1861

被折叠的 条评论
为什么被折叠?



