Android 是否将ListFragment添加到ViewPager?

Android 是否将ListFragment添加到ViewPager?,android,android-fragments,Android,Android Fragments,我正试图将Android文档中提供的联系人列表合并到我的查看寻呼机中,但是我不知道正确的方法是什么。由于联系人列表是一个ListFragment而不是一个片段,所以我不能将其添加到我的ViewPager中 我应该将联系人列表作为ListFragment添加到ViewPager中,还是应该以某种方式将其转换为片段?将联系人列表添加到我的ViewPager的正确方法是什么 这就是我正在尝试的: public class MainActivity extends FragmentActivity im

我正试图将Android文档中提供的联系人列表合并到我的查看寻呼机中,但是我不知道正确的方法是什么。由于联系人列表是一个ListFragment而不是一个片段,所以我不能将其添加到我的ViewPager中

我应该将联系人列表作为ListFragment添加到ViewPager中,还是应该以某种方式将其转换为片段?将联系人列表添加到我的ViewPager的正确方法是什么

这就是我正在尝试的:

public class MainActivity extends FragmentActivity implements TextToSpeech.OnInitListener {
    private ViewPager mPager;
    private MyPagerAdapter mPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new MyPagerAdapter(getFragmentManager());

    // ADD Fragments
    Dialer dialer = new Dialer();
    mPagerAdapter.addFragment(dialer);
    ContactListFragment contacts = new ContactListFragment();
    mPagerAdapter.addFragment(contacts); // Error:  'addFragment(android.app.fragment) cannot be applied to com.example.android.launcher.ContactListFragment'
    mPager.setAdapter(mPagerAdapter);

}

private class MyPagerAdapter extends FragmentPagerAdapter {
    ArrayList<Fragment> fragments = new ArrayList<Fragment>();

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    public void addFragment(Fragment fragment) {
        fragments.add(fragment);
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }
}
// ...
public类MainActivity扩展FragmentActivity实现TextToSpeech.OnInitListener{
私人寻呼机;
私人MyPagerAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPager=(ViewPager)findViewById(R.id.pager);
mPagerAdapter=新的MyPagerAdapter(getFragmentManager());
//添加片段
拨号器拨号器=新拨号器();
mPagerAdapter.addFragment(拨号器);
ContactListFragment contacts=新ContactListFragment();
mPagerAdapter.addFragment(contacts);//错误:“addFragment(android.app.fragment)无法应用于com.example.android.launcher.ContactListFragment”
mPager.setAdapter(mPagerAdapter);
}
私有类MyPagerAdapter扩展了FragmentPagerAdapter{
ArrayList片段=新的ArrayList();
公共MyPagerAdapter(碎片管理器fm){
超级(fm);
}
公共void addFragment(片段片段){
片段。添加(片段);
notifyDataSetChanged();
}
@凌驾
public int getCount(){
返回fragments.size();
}
@凌驾
公共片段getItem(int位置){
返回碎片。获取(位置);
}
}
// ...
联系人列表片段:

public class Contacts extends ListFragment implements AdapterView.OnItemClickListener, LoaderManager.LoaderCallbacks<Cursor> {
    //...
公共类联系人扩展ListFragment实现AdapterView.OnItemClickListener、LoaderManager.LoaderCallbacks{
//...

与ViewPager一起使用时,您最有可能使用FragmentPagerAdapter而不是PagerAdapter。您可以扩展FragmentPagerAdapter类,并编写一个方法,将片段添加到片段的ArrayList中。由于ListFragment只是从Fragment类扩展而来,因此不必担心

您可以将代码更改为

public class MainActivity extends FragmentActivity implements TextToSpeech.OnInitListener{
private ViewPager mPager;
private MyPagerAdapter mPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());

    // ADD Fragments
    Dialer dialer = new Dialer();
    mPagerAdapter.addFragment(dialer);
    Contacts contacts= new Contacts();
    mPagerAdapter.addFragment(contacts);

    //set the adapter to the View pager
    mPager.setAdapter(mPagerAdapter);
}

private class MyPagerAdapter extends FragmentPagerAdapter {
    ArrayList<Fragment> fragments = new ArrayList<Fragment>();

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return fragments.size();
    }

    public void addFragment(Fragment frag) {
        fragments.add(frag);
    }

}
public类MainActivity扩展FragmentActivity实现TextToSpeech.OnInitListener{
私人寻呼机;
私人MyPagerAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPager=(ViewPager)findViewById(R.id.pager);
mPagerAdapter=新的MyPagerAdapter(getSupportFragmentManager());
//添加片段
拨号器拨号器=新拨号器();
mPagerAdapter.addFragment(拨号器);
联系人=新联系人();
mPagerAdapter.addFragment(触点);
//将适配器设置为查看寻呼机
mPager.setAdapter(mPagerAdapter);
}
私有类MyPagerAdapter扩展了FragmentPagerAdapter{
ArrayList片段=新的ArrayList();
公共MyPagerAdapter(碎片管理器fm){
超级(fm);
}
@凌驾
公共片段getItem(int位置){
返回碎片。获取(位置);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回fragments.size();
}
公共无效添加碎片(碎片碎片碎片){
碎片。添加(frag);
}
}

这是一个粗略的代码,请原谅。

当与ViewPager一起使用时,您最有可能使用FragmentPagerAdapter而不是PagerAdapter。您可以扩展FragmentPagerAdapter类,并编写一个方法,将片段添加到片段的ArrayList中。由于ListFragment只是从Fragment类扩展而来,因此应该没有任何内容担心

您可以将代码更改为

public class MainActivity extends FragmentActivity implements TextToSpeech.OnInitListener{
private ViewPager mPager;
private MyPagerAdapter mPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());

    // ADD Fragments
    Dialer dialer = new Dialer();
    mPagerAdapter.addFragment(dialer);
    Contacts contacts= new Contacts();
    mPagerAdapter.addFragment(contacts);

    //set the adapter to the View pager
    mPager.setAdapter(mPagerAdapter);
}

private class MyPagerAdapter extends FragmentPagerAdapter {
    ArrayList<Fragment> fragments = new ArrayList<Fragment>();

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return fragments.size();
    }

    public void addFragment(Fragment frag) {
        fragments.add(frag);
    }

}
public类MainActivity扩展FragmentActivity实现TextToSpeech.OnInitListener{
私人寻呼机;
私人MyPagerAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPager=(ViewPager)findViewById(R.id.pager);
mPagerAdapter=新的MyPagerAdapter(getSupportFragmentManager());
//添加片段
拨号器拨号器=新拨号器();
mPagerAdapter.addFragment(拨号器);
联系人=新联系人();
mPagerAdapter.addFragment(触点);
//将适配器设置为查看寻呼机
mPager.setAdapter(mPagerAdapter);
}
私有类MyPagerAdapter扩展了FragmentPagerAdapter{
ArrayList片段=新的ArrayList();
公共MyPagerAdapter(碎片管理器fm){
超级(fm);
}
@凌驾
公共片段getItem(int位置){
返回碎片。获取(位置);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回fragments.size();
}
公共无效添加碎片(碎片碎片碎片){
碎片。添加(frag);
}
}

这是一个粗略的代码,请原谅。

ListFragment扩展了Fragment,这应该不是问题


确保您正在导入的是
android.support.v4.app.ListFragment
,而不是
android.app.ListFragment

ListFragment扩展了片段,这不应该是问题


请确保您正在导入的是
android.support.v4.app.ListFragment
,而不是
android.app.ListFragment

ListFragment扩展了片段..那么您有什么问题..您能解释清楚吗?我将FragmentPagerStateAdapter更改为FragmentPagerAdapter,但我在将联系人添加到viewPager时仍然遇到问题。我发现错误
addFragment(android.app.fragment)无法应用于com.example.android.launcher.ContactListFragment,我在Fragm中也遇到了这个错误