之前讲过切换 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;

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐