最近在学习安卓的fragment组件,发现编译的时候一直报错
The method add(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, PlaceholderFragment)
这是错误的代码:
<span style="font-size:18px;">package com.example.learnfragment;
import android.app.Activity;
import android.app.ActionBar;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.os.Build;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit();
}
}</span>
为什么会出现这个错误呢?修改并熊度了好久后发现引用错了包,这里应该引用support.v4.app.FragmentManager。这两个包看起来差不多但其实还是有一点差别的,少年就弄错了好几次。
这个support.v4.app.FragmentManager包可以支持的安卓版本最低为1.6,但是缺点是只能再程序中通过add或是replace的方式添加。并且使用这个包的类必须继承自FragmentActivity不然会无法使用getSupportFragmentManager()。
而import.android.app.FragmentManager这个包是只支持安卓版本3.0以上的,但有着可以不光可以通过在程序中添加,还可以使用<fragment>标签这种作弊一样的方式添加的优点。
最后将贴出使用support.v4.app.FragmentManager改正的正确的代码。
<span style="font-size:14px;">package com.example.learnfragment;
import android.app.Activity;
import android.app.ActionBar;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuItem;
import android.os.Build;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager manager = getSupportFragmentManager();
PlaceholderFragment pl = new PlaceholderFragment();
FragmentTransaction transction = getSupportFragmentManager().beginTransaction();
transction.add(R.id.container, pl).commit();
}</span><span style="font-size:24px;">
}</span>