由于是参考复制别人的代码,因此踩了几个坑,之后要注意。

所使用的函数

Fragment的使用有两个包支持

首先是app包

所扩展的类为Activity,获取FragmentManager的函数为getFragmentManager()

对应代码为

1
2
3
4
5
6
7
8
9
10
public class MainActivity extends Activity {
public onCreate(Bundle savedInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.main_activity);
getFragmentManager()
.beginTransaction()
.replace(R.id.container, new Fragment())
.commitNow();
}
}

而在v-4包中,

所扩展的类为AppCompateActivity,获取FragmentManager的函数为getSupportFragmentManager()

对应代码为

1
2
3
4
5
6
7
8
9
10
public class MainActivity extends AppCompateActivity {
public onCreate(Bundle savedInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.main_activity);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, new Fragment())
.commitNow();
}
}

记得setContentView

由于一时疏忽,我把以上代码写成了这样

1
2
3
4
5
6
7
8
9
10
public class MainActivity extends AppCompateActivity {
public onCreate(Bundle savedInstanceState) {
super.onCreate(saveInstanceState);

getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, new Fragment())
.commitNow();
}
}

没错,我漏掉了一个setContentView,而这个页面又是主界面,所以导致,我所编写的apk,只要开启了,就立即闪退。

可以理解为,

1
2
3
4
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, new Fragment())
.commitNow();

只是在原有页面内容的基础上,进行了替换,因此需要setContentView,铺设一个基础的背板。