Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在viewpager中显示片段?_Java_Android_Xml_Android Fragments_Android Viewpager - Fatal编程技术网

Java 如何在viewpager中显示片段?

Java 如何在viewpager中显示片段?,java,android,xml,android-fragments,android-viewpager,Java,Android,Xml,Android Fragments,Android Viewpager,我的应用程序目前由3个片段组成,其中2个片段在actionbarsherlock Library上显示为选项卡。 每当我尝试用我的第三个片段替换我的第一个片段时,新视图都是空白的 如何显示第三个?调用方法getItem()时是否需要返回新的实例化片段 这是我的应用程序布局的一个例子 public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener { ViewPager mVi

我的应用程序目前由3个片段组成,其中2个片段在actionbarsherlock Library上显示为选项卡。 每当我尝试用我的第三个片段替换我的第一个片段时,新视图都是空白的

如何显示第三个?调用方法getItem()时是否需要返回新的实例化片段

这是我的应用程序布局的一个例子

public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener  {
ViewPager mViewPager;
myPageAdapter mPageAdapter;
List<Fragment> fragments;
ActionBar actionBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    fragments = new Vector<Fragment>();
    fragments.add(LoginFragment.newInstance());
    fragments.add(EventFragment.newInstance());

    mPageAdapter = new myPageAdapter(getSupportFragmentManager(), fragments, this);

    actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setLogo(R.drawable.logo);
    actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mPageAdapter);
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
            invalidateOptionsMenu();
        }
    });

    for (int i = 0; i < mPageAdapter.getCount(); i++) {
    actionBar.addTab(actionBar.newTab().setText(mPageAdapter.getPageTitle(i)).setTabListener(this));
    }

}


@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    menu.findItem(R.id.itemRefresh).setVisible(mViewPager.getCurrentItem() == 1);
    menu.findItem(R.id.itemArchive).setVisible(mViewPager.getCurrentItem() == 0);
    return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.layout.menu, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.itemRefresh:
        Toast.makeText(this, "updating page", Toast.LENGTH_SHORT).show();
        return true;
    case R.id.itemArchive:
        displayArchive();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

public void displayArchive() {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.pager, ArchiveFragment.newInstance());
    ft.addToBackStack(null);
    ft.commit();
}
公共类MainActivity扩展SherlockFragmentActivity实现ActionBar.TabListener{
ViewPager mViewPager;
myPageAdapter;
列出片段;
ActionBar ActionBar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
片段=新向量();
add(LoginFragment.newInstance());
add(EventFragment.newInstance());
mPageAdapter=新的myPageAdapter(getSupportFragmentManager(),片段,此);
actionBar=getSupportActionBar();
actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u选项卡);
actionBar.setLogo(R.drawable.logo);
actionBar.setDisplayOptions(0,actionBar.DISPLAY\u SHOW\u TITLE);
mViewPager=(ViewPager)findViewById(R.id.pager);
mViewPager.setAdapter(mPageAdapter);
mViewPager.setOnPageChangeListener(新的ViewPager.SimpleOnPageChangeListener(){
@凌驾
已选择页面上的公共无效(内部位置){
actionBar.setSelectedNavigationItem(位置);
无效操作菜单();
}
});
对于(int i=0;i
页面适配器

public class myPageAdapter extends FragmentPagerAdapter {
private Context context;
private List<Fragment> fragments;

public myPageAdapter(FragmentManager fm, List<Fragment> fragments, Context context) {
    super(fm);
    this.context = context;
    this.fragments = fragments;
}

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

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

@Override
public String getPageTitle(int position) {
    switch (position) {
    case 0:
        return context.getString(R.string.title_fragment1);
    case 1:
        return context.getString(R.string.title_fragment2);
    default:
        return null;
    }
}
公共类myPageAdapter扩展了FragmentPagerAdapter{
私人语境;
私有列表片段;
公共myPageAdapter(FragmentManager fm、列表片段、上下文){
超级(fm);
this.context=上下文;
this.fragments=片段;
}
@凌驾
公共片段getItem(int位置){
返回碎片。获取(位置);
}
@凌驾
public int getCount(){
返回fragments.size();
}
@凌驾
公共字符串getPageTitle(int位置){
开关(位置){
案例0:
返回context.getString(R.string.title\u fragment1);
案例1:
返回context.getString(R.string.title\u fragment2);
违约:
返回null;
}
}
}

主要活动xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>


提前感谢。

我发现我没有将它们存储在arraylist中,而是在即将检索它们时对它们进行了实例化


当我想在两个片段之间切换时,我通过删除,然后返回一个特定片段来处理它,在我通知数据集已更改之后。

。检查此示例,如果它有助于Hanks,但这不是我搜索的。我已经可以显示我有选项卡的片段。所以我需要的是能够显示第三个片段t、 它不在选项卡栏中。fragment由一个活动托管。所以我想您需要一个托管第三个片段的活动我知道,我已经有一个SherlockFragmentActivity,它的行为类似于一个活动。为什么我需要另一个活动来托管第三个片段?