之前讲过切换 Activity,也讲过多个 Fragment 左右滑动,不过那里讲的 fragment 滑动是利用模板,今天从纯手动的角度来讲一下 fragment 切换。
首先、建立一个 Activity、两个 Fragment
均包含代码文件和布局文件。
然后、在 Activity 的布局文件中放一个承载元素
这个承载元素,比如就是 LinearLayout,用以显示 Fragment 的内容。
另外我们再放两个按钮,点击按钮时切换 Fragment。
最后、在 Activity 中写切换代码public class MainActivity extends AppCompatActivity {
frag1 f1 = new frag1();
frag2 f2 = new frag2();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, f1, "");
ft.commit();
}
});
Button button2 = (Button)findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, f2, "");
ft.commit();
}
});
}
}
上述代码中:container 为第二步中说的承载元素的 id;另外,new frag1()、new frag2() 可以改进一下,避免 Activity 加载的时候就初始化,不过最好不要每次 button 切换的时候都 new,因为这会导致原来 Fragment 中的状态(比如用户填写的内容)丢失。
有错误?
可能会遇到 ft.replace(R.id.container, f2, ""); 这里报第二个参数类型错误。
怎么解决呢?
我们进入 Fragment 这个代码页,将:
import android.support.v4.app.Fragment;
改为
import android.app.Fragment;